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