Flink 初学笔记(角色及组件)
集群架构
- JobManager:管理节点,每个集群至少一个,管理整个集群的计算资源,Job 管理与调度执行,以及 Checkpoint 协调。
- TaskManager:每个集群有多个 TaskManager,负责计算资源提供。
- Client:本地执行应用 main() 方法,解析 JobGraph 对象,并最终将 JobGraph 提交到 JobManager 运行,同时监控 Job 执行的状态。
JobManager
功能及组件:
Checkpoint Coordinator
组件用于协调每个TaskManager
中的Checkpoint
的协调和执行;- 由
Client
提交的JobGraph
(逻辑图) 生成Execution Graph
(物理执行图) ,Execution Graph
会被拆分不同的执行单元,提交到TaskManager
中执行; - 将一个
Task
拆分为不同的Task
,并部署到不同的TaskManager
上运行(JobManager
和TaskManager
通过Task
进程进行交互); JobManager
与Client
和TaskManager
之间的都是通过Akka
实现的RPC
协议进行通信,核心组件是Actor System
;- 通过
Job Dispatch
对Client
提交的Job
进行拆分,分发到各个TaskManager
; ResourceManager
管理资源;- 管理
TaskManager
注册;
TaskManager
功能及组件:
- 执行分发到该
TaskManager
上的任务,在Task Scheduling
中启动多个Task Slot
线程,用于执行任务; Network Manager
用于TaskManger
之间交互(TaskManger
与JobManager
交互由Actor System
实现);Data Exchange
组件用于数据交互;Shuffle Environment
在数据交互过程中出现的Shuffle
就由该组件对数据进行传输和交互;Actor System
同JobManager
;Memory Management
对内存单元进行管理;TaskManager
还负责向JobManager
中的ResourceManager
进行注册;
Client
- 用于提交 Job 的机器会在本地启动一个
Client
的进程,用于解析用户提交的 Jar; - 将 Jar 中的
main()
方法拿出来执行,执行用于生成一个JobGraph
对象; - 将 Job 以及依赖包提交到
JobManager
;
JobGraph
功能:
- 通过有向无环图表达用户程序;
- 不同程序的抽象表达(DataStream API,DataSet API,Flink SQL,Table API);
- 客户端和集群之间的 Job 描述载体;
部署模式
- Session Mode:共享 JobManager 和 TaskManager,所有提交的 Job 都在一个生命周期中运行。
- Per-Job Mode:独占 JobManager 和 Task,每个 Job 单独启动一个生命周期。
- Application Mode:Application 的 main() 运行在集群中(Cluster),每个 Application 对应一个生命周期,其中可以包含多个 Job。
PS:Application Mode 模式是 Flink 1.11 版本中新加入的部署模式,介绍如下(摘抄自网络):
- 每个 Application 对应一个 JobManager,且可以运行多个 Job;
- 客户端无需将所有依赖上传到 JobManager,仅负责 Job 的提交;
- Application 的 main() 方法运行在 JobManager 中,将 JobGraph 的生成放在集群中运行,客户端压力降低;
优点:降低网络带宽的消耗和客户端的负载,实现 Application 间的资源隔离,Application 内实现资源共享
缺点:太新,没有经过实际生产环境的检验
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Tianyi's Blog!
评论