3.flink运行时架构解析
Posted mask哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.flink运行时架构解析相关的知识,希望对你有一定的参考价值。
1.flink任务调度原理
Flink 运行时架构主要组成:
Client、JobManager(master节点)和TaskManger(slave节点)。
Client:Flink 作业在哪台机器上面提交,那么当前机器称之为Client。用户开发的Program 代码,它会构建出DataFlow graph,然后通过Client提交给JobManager。
JobManager:是主(master)节点,相当于YARN里面的REsourceManager,生产环境中一般可以做HA 高可用。JobManager会将任务进行拆分,调度到TaskManager上面执行。
TaskManager:是从节点(slave),TaskManager才是真正实现task的部分。
Client提交作业到JobManager,需要跟JobManager进行通信,使用Akka框架进行通信,另外Client与JobManager进行数据交互,使用的是Netty框架。Akka通信基于Actor System,Client可以向JobManager发送指令,比如Submit job或者Cancel /update job。JobManager也可以反馈信息给Client,比如status updates,Statistics和results。
Client提交给JobManager的是一个Job,然后JobManager将Job拆分成task,提交给TaskManager(worker)。JobManager与TaskManager也是基于Akka进行通信,JobManager发送指令,比如Deploy/Stop/Cancel Tasks或者触发Checkpoint,反过来TaskManager也会跟JobManager通信返回Task Status,Heartbeat(心跳),Statistics等。另外TaskManager之间的数据通过网络进行传输,比如Data Stream做一些算子的操作,数据往往需要在TaskManager之间做数据传输。
当Flink系统启动时,首先启动JobManager和一至多个TaskManager。JobManager负责协调Flink系统,TaskManager则是执行并行程序的worker。当系统以本地形式启动时,一个JobManager和一个TaskManager会启动在同一个JVM中。当一个程序被提交后,系统会创建一个Client来进行预处理,将程序转变成一个并行数据流的形式,交给JobManager和TaskManager执行。
补充说明如下:
- 作业管理器(JobManager)
控制一个应用程序执行的主进程,接收应用程序的执行,该应用程序包括:作业图(jobGraph)、逻辑数据流图(logical dataflow graph)和打包了所有类库和其他资源的jar包。
JobManager会把JobGraph转换成一个物理层面的数据流图,即执行图(executionGraph),包含所有可以并行执行的任务。
JobManager向资源管理器(ResourceManager)申请执行任务所需的资源,即任务管理器(Taskmanager)上的插槽(slot)。获取到足够资源就会将执行图分发到真正运行任务 的Taskmanager上,整个过程中JobManager负责中央协调的操作,如检查单(checkpoint)的协调。 - 任务管理器(TaskManager)
2.1 Flink中的工作进程。通常在flink中会有多个TaskManager运行,每个一个taskManager中包含一定数量的插槽(slots)。插槽的数量限制了taskManager能执行的任务数量。
2.2 启动之后,taskmanager会向资源管理器注册它的插槽;收到资源管理器的指令后,taskManager会将插槽一个或多个提供给jobmanager调用。JobManager可以向插槽分配任务(tasks)来执行。
2.3 在执行过程中,一个taskmanager可以跟其它运行同一个应用程序的taskmanager交换数据。 -
资源管理器(ResourceManager)
3.1 负责管理任务管理器(TaskManager)的插槽(slot),TaskManager插槽是Flink中定义的处理资源单元。
3.2 Flink为不同的环境和资源管理工具提供了不同资源管理器,比如YARN、Mesos、K8s,以及standalone部署。
3.3 当JobManager申请插槽资源时,ResourceManager会将有空闲插槽的TaskManager分配给JobManager。如果ResourceManager没有足够的资源满足JobManager的请求,它还可以向资源提供平台发起会话,以提供启动TaskManager进程的容器。 -
分发器(Dispacher)
可以跨作业运行,它为应用提交提供了REST接口。
当一个应用被提交执行时,分发器就会启动并且将应用移交给一个JobManager。
Dispacher在架构中可能并不是必需的,这取决于应用提交运行的方式。
2.运行时架构组件
3.flink任务提交流程
以上是关于3.flink运行时架构解析的主要内容,如果未能解决你的问题,请参考以下文章
Flink 源码解析 —— 深度解析 Flink 序列化机制
Flink 源码解析 —— 如何获取 StreamGraph?
Flink 源码解析 —— 如何获取 ExecutionGraph ?