一个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()办法

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