一个 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() 办法
如感兴趣,点赞加关注,非常感谢!!!