一、运行时组件
1. JobManager
a. JobManager是控制一个程序执行的主进程
b. JobManager接收应用程序,应用程序包括作业图(JobGraph)Jar包等,将JobGraph转化成物理层面的数据流图,叫执行图(ExecutionGraph)
c. JobManager向ResourceManager申请TaskManager上的slot,将ExecutionGraph发布到对应的TM上
d. JobManager还负责执行过程中的协调等工作,比如checkpoint的协调工作
2. ResourceManager
a. 主要负责管理TM的slot, slot是Flink中最小的资源管理单元
3. TaskManager
a. Flink中真正负责工作的组件,每个TM都包含了一定数量的slot
b. 收到ResourceManager的指令后,TM会将一个或多个slot提供给JM调用
c. 执行过程中,TM可以和其他运行的同一个Job的TM交换数据
d. 一个TM中的slot共享CPU, 划分内存
4. Dispatcher
a. 当应用被提交时,Dispatcher会将应用提交给JM
b. Dispatcher会启动Web UI
二、任务提交流程
1. 客户端提交应用程序给Dispatcher
2. Dispatcher将应用程序提交给JM
3. JM向RM请求所需的slot
4. RM启动TM
5. TM向RM注册slot情况
6. JM向TM发出提供slot的指令
7. TM将slot提供给JM
8. JM向TM提交执行的ExecutionGraph和Jar包等
9. TM工作工程中可以相互交换数据
三、任务调度原理
1. StreamGraph在client上生成,是用户编写的Stream程序生成的最初的图,表达了程序的拓扑结构
2. JobGraph在client上生成,是StreamGraph经过了优化的产物,将符合条件的算子节点组合成算子链,减少数据在节点见流动产生的消耗
3. ExecutionGraph根据JobGraph生成,在JM上生成,是ExecutionGraph的并行化结果,是调度层最核心的数据结构
4. 物理执行图是JM根据ExecutionGraph对Job进行调度后,在各个TM上部署后形成的实际执行图,不属于数据结构