Flink浅谈之JobManger、TaskManager

从集群任务中剖析:

JobManager 负责整个 Flink 集群任务的调度以及资源的管理,从客户端中获取提交的应用,然后根据集群中 TaskManager TaskSlot 的使用情况,为提交的应用分配相应的TaskSlot 资源并命令 TaskManager 启动从客户端中获取的应用。 JobManager 相当于整个集 群的 Master 节点,且整个集群有且只有一个活跃的 JobManager ,负责整个集群的任务管理和资源管理。JobManager TaskManager 之间通过 Actor System 进行通信,获取任务执行的情况并通过 Actor System 将应用的任务执行情况发送给客户端。同时在任务执行的过程中,Flink JobManager 会触发 Checkpoint 操作,每个 TaskManager 节点 收到Checkpoint 触发指令后,完成 Checkpoint 操作,所有的 Checkpoint 协调过程都是在 Flink JobManager 中完成。当任务完成后, Flink 会将任务执行的信息反馈给客户端,并且释放掉TaskManager 中的资源以供下一次提交任务使用。
TaskManager 相当于整个集群的 Slave 节点,负责具体的任务执行和对应任务在每个节点上的资源申请和管理。客户端通过将编写好的 Flink 应用编译打包,提交到 JobManager,然后 JobManager 会根据已注册在 JobManager TaskManager 的资源情况,
将任务分配给有资源的 TaskManager 节点,然后启动并运行任务。 TaskManager 从 JobManager 接收需要部署的任务,然后使用 Slot 资源启动 Task ,建立数据接入的网络连接,接收数据并开始数据处理。同时 TaskManager 之间的数据交互都是通过数据流的方式进行的。可以看出,Flink 的任务运行其实是采用多线程的方式,这和 MapReduce JVM 进行的方式有很大的区别,Flink 能够极大提高 CPU 使用效率,在多个任务和 Task 之间通过 TaskSlot 方式共享系统资源,每个 TaskManager 中通过管理多个 TaskSlot 资源池对资源进行有效管理。
 

从集群启动过程剖析:

JobManager 的职责主要是接收 Flink 作业,调度 Task ,收集作业状态和管理 TaskManager
它包含一个 Actor ,并且做如下操作:
  • RegisterTaskManager: 它由想要注册到 JobManager TaskManager 发送。注册成功会通过 AcknowledgeRegistration 消息进行 Ack
  • SubmitJob: 由提交作业到系统的 Client 发送。提交的信息是 JobGraph 形式的作业描述信息。
  • CancelJob: 请求取消指定 id 的作业。成功会返回 CancellationSuccess,否则返回 CancellationFailure。
  • UpdateTaskExecutionState: TaskManager 发送,用来更新执行节点(ExecutionVertex) 的状态。成功则返回 true,否则返回 false
  • RequestNextInputSplit: TaskManager 上的Task请求下一个输入split , 成功则返 回 NextInputSplit,否则返回 null
  • JobStatusChanged: 它意味着作业的状态(RUNNING, CANCELING, FINISHED,)发生 变化。这个消息由 ExecutionGraph 发送。
TaskManager的启动流程较为简单:
   启动类:org.apache.flink.runtime.taskmanager.TaskManager 的核心启动方法SelectNetworkInterfaceAndRunTaskManager启动后直接向JobManager注册自己,注册完成后,进行部分模块的初始化。

你可能感兴趣的:(Flink)