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 等资源管理系统
Flink核心组件_第1张图片

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 所需要的资源
Flink核心组件_第2张图片

2、详说JobMaster、REST和ResourceManager组件

Flink核心组件_第3张图片
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()方法

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

你可能感兴趣的:(flinkjava)