乐趣区

关于flink:说Flink核心组件

一个 Flink Cluster 是由 一个 Flink Master 和多个 TaskManager 组成的Flink Master 和 TaskManager 是集成级组件,其余组件都是过程内的组件

Flink Master 中每一个 JobManager 独自治理一个具体的 Job,JobManager 中的 Scheduler 组件负责调度执行该 Job 的 DAG 中所有 Task,收回资源申请,即整个资源调度的终点;JobManager 中 Slot Pool 组件 持有该 Job 的所有资源。另外,FlinkMaster 中惟一的 ResourceManager 负责整个 Flink Cluster 的资源调度以及与内部调度零碎对接,这里的内部调度零碎指的是 Kubernetes、Mesos、Yarn 等资源管理零碎

1、Master

JobManager

  • 负责一个具体的 Job 的执行,在一个集群中,可能会有多个 JobManager 同时执行
  • JobManager 的职责次要是接管 Flink 作业,调度 Task,收集作业状态和治理 TaskManager
  • 只有在承受到 CLient 端提交的工作才会启动

ResourceManager

  • Flink 的集群资源管理器,Taskslot 的治理和资源申请等工作,都由它负责
  • TaskManager 启动后会不停的 对 ResourceManager 进行心跳通信

Dispatcher

  • Dispatcher 服务提供 REST 接口来接管 client 的 job 提交,它负责启动 JobManager 和提交 job,同时运行 Web UI
  • 负责接管用户提交的 JobGragh, 而后启动一个 JobManager 来管理应用程序

WebMonitorEndpoint

如果客户端通过 flink run 的形式来提交一个 job 到 flink 集群 ,最终是由
WebMonitorEndpoint 来接管,并且决定应用哪一个 Handler 来执行解决

总结

Flink 集群的节点运行 : ResourceManager 和 Dispatcher,当 Client 提交一个 job 到集 群运行的时候(客户端会把该 Job 构建成一个 JobGragh 对象),Dispatcher 负责调度 JobManager 来治理这个 Job 的执行,JobManager 向 ResourceManager 申请执行 Task 所须要的资源

2、详说 JobMaster、REST 和 ResourceManager 组件

JobManager(Master 节点)包含 REST、Dispatcher、ResourceManager 和 JobMaster而 TaskManager(Worker 节点)次要有 TaskExecutor

  • REST 的主体局部 WebMonitorEndpoint 接管客户端的 HTTP 申请,提供各种 REST 服务,如作 业、集群的指标、各种作业信息的状况、操作作业等
  • Dispatcher 的次要性能是接管 REST 转发的操作 JobMaster 申请,启动和治理 JobMaster。JobMaster 次要负责作业的运行调度和检查点的协调
  • ResourceManager 在不同部署模式下对资源进行治理 ( 次要包含申请、回收资源及资源状态 管控)
  • TaskExecutor 对资源 (CPU、内存等) 以逻辑的 Slot 进行划分,Slot 供作业的 Task 调度到其上 运行

REST

  • REST 是 JobManager 裸露给内部的服务,次要为客户端和前端提供 HTTP 服务 。REST 局部源代 码的外围 WebMonitorEndpoint 类
  • WebMonitorEndpoint 继承 RestServerEndpoint 类,实现 JsonArchivist 和 LeaderContender 接口 ,其中 : RestServerEndpoint 是基于 Netty 实现的抽象类,是整个裸露 REST 服务的外围局部;LeaderContender接口定义了 WebMonitorEndpoint 在 (Leader) 选举方面的解决办法;JsonArchivist接口定义了基于 ExecutionGraph 生成 JSON 的接口,供查问作业执行信息的 Handler 来实现
  • MiniDispatcherRestEndpoint 是作为 Per-Job 模式 (一个作业对应一个集群的模式) 的实现
  • DispatcherRestEndpoint 是作为 Session 模式的实现
  • WebMonitorEndpoint 的外围是启动过程,启动实现即可为内部提供 REST 服务,WebMontiorEndpoint 的启动过程如下 :

    • 初始化解决内部申请的 Handler
    • 将解决内部申请 Handler 注册到路由器(Router)
    • 创立并启动 NettyServer
    • 启动领袖选举服务

ResourceManager

  • ResourceManager 组件负责资源的调配与开释,以及资源状态的治理
  • ResourceManager 组件的 根底类为 ResourceManager
  • ResourceManager 类实现的是 ResourceManagerGateway 接口,实现的办法供 Dispatcher、REST、JobMaster 组件调用
  • ResourceManager 的子类有StandaloneResourceManager、MesosResourceManager、YarnResourceManager,作为不同部署模式的实现,实现在各种部署模式下与资源管控的交互
  • ResourceManager 与其余组件的通信次要有以下几种 :

    • REST 组件通过 Dispatcher透传或者间接与 ResourceManager 通信来获取 TaskExecutor 的详细信息、集群的资源状况、TaskExecutor Metric 查问服务的信息、TaskExecutor 的日志和标记输入。具体体现在 Flink UI 上
    • JobMaster 与 ResourceManager 的交互次要体现在申请 Slot、开释 Slot、将 JobMaster 注册到 ResourceManager,以及组件之间的心跳
    • TaskExecutor 与 ResourceManager 的交互 次要是将 TaskExecutor 注册到 ResourceManager、汇报 TaskExecutor 上 Slot 的状况,以及组件之间心跳通信
    • 对于资源 Slot,在 TaskExecutor 上以 Slot 逻辑单元对 TaskManager 资源 (资源 CPU、内 存等) 进行划分,供作业的 Task 调度 ; 在 JobMaster 和 ResourceManager 上保护与 TaskExecutor 的 Slot 的映射关系JobManager 通过 SlotPool 来治理运行作业的 Slot,ResourceManager 通过 SlotManager 来治理 TaskManager 注册过去的 Slot,供多个 JobMaster 的 SlotPool 来申请和调配

JobMaster

  • JobMaster 组件次要 负责单个作业的执行
  • JobMaster 组件对应的根底类为 JobMaster 类
  • JobMaster类继承 FencedRpcEndpoint 类来实现带 Token(Fencing Token)查看的 RpcEndpoint
  • JobMaster 类实现 JobMasterGateway 接口,来提供其余组件调用的 RPC 办法
  • JobMaster 类实现 JobMasterService 接口,来供 JobManagerRunner 调用
  • JobManagerRunner 负责 JobMaster 的创立与启动,以及与 JobMaster 领袖选举相干的解决
  • 在 JobMaster 组件中,最外围的组件为 Scheduler 和 CheckpointCoordinator

    • 其中Scheduler 负责 ExecutionGraph 的调度,JobMaster 的 Scheduler 的一个外围逻辑是为作业的任务调度申请 Slot
    • CheckpointCoordinator 负责作业检查点的协调
  • JobMaste 是申请 Slot 的流程的发起方,其中的 SlotPool 作为作业执行图在调度时提供 Slot 性能 以及对 Slot 的生命周期治理,与作业一一对应(一个作业有一个 SlotPool 实例),其实现类为 SlotPoolImpl

3、TaskManager

  • TaskExecutor 组件是 TaskManager 的外围局部 ,次要负责多个 Task(工作) 的执行
  • TaskExecutor 组件的根底类为 TaskExecutor 类
  • TaskExecutor 类继承 RpcEndpoint 抽象类,由实现的 AkkaRpcService 来反对 RpcEndpoint 的实现
  • TaskExecutor 类实现 TaskExecutorGateway 接口,提供其余组件(如 JobMaster、ResourceManager 等)RPC 的办法
  • TaskManagerRunner 是各种部署模式下 TaskManager 的执行入口,负责构建 TaskExecutor 的网 络、I/ O 治理、内存治理、RPC 服务、HA 服务以及启动 TaskExecutor
  • TaskExecutor 组件负责与 ResourceManager、JobMaster 的通信,资源 Slot 的申请和汇报,Task 的部署和操作及状态的变更,以及检查点相干的协调等
  • TaskExecutor 与 ResourceManager、JobMaster的通信机会的状况如下 :

    • 与 ResourceManager 首次建设通信是在 ResourceManager 向部署模式申请和启动 TaskExecutor,TaskExecutor 启动后,通过 HA 服务监听到 ResourceManager 的领袖信息,被动发送音讯建立联系
    • TaskExecutor 与 JobMaster 建设通信的机会是 ResourceManager 向 TaskExecutor 申请 Slot 时,TaskExecutor 会依据申请 Slot 中的作业信息,获取 JobMaster 的通信地址,被动发送信息建设通信,并将 Slot 提供给 JobMaster
  • TaskSlot 组织构造与状态
    Slot 是划分 TaskExecutor 资源的根本逻辑单元。TaskExecutor 中所有 Slot 的状况由
    TaskSlotTable 类来组织治理。TaskSlotTable 类由以下属性组成,治理所有 Slot 的状况 :

    • timerService : 负责将处于已调配状态 (ALLOCATED) 的 Slot 退出超时检测服务。TaskExecutor 将 Slot 提供给 JobMaster,一旦 Slot 提供 JobMaster 胜利,将移除超时检 测,否则最终会超时。超时会调用 freeSlot 办法将该 Slot 置为闲暇状态(FREE)
    • taskSlots : 保护所有 TaskSlot 的列表,供 Slot 申请通过 Slot 下标来占有相应的 Slot。
    • allocationIDTaskSlotMap : 记录调配 ID 与 TaskSlot 的映射状况,供通过调配 ID 查问 TaskSlot 的状况。
    • taskSlotMappings : 记录执行工作的惟一确定 ID 与工作和 TaskSlot 的映射,供通过执行 工作的惟一确定 ID 查问工作绑定 TaskSlot 的状况
    • slotsPerJob : 记录作业占有 Slot 的状况
    • slotActions : 负责 Slot 的开释与超时的逻辑
    • started : 标记 TaskSlotTable 是否曾经启动
  • 接管来自 ResourceManager 的 Slot 申请

    • 对 Slot 的操作和状态变动以及于其余组件通信的逻辑
    • TaskExecutor 接管来自 ResourceManager 的 Slot 申请入口 ,TaskExecutor 的 requestSlot() 办法

如感兴趣,点赞加关注,非常感谢!!!

退出移动版