Flink集群架构
概念
-
Flink
采用Master-Slave架构
,其中JobManager
作为集群Master节点,主要负责任务协调
和资源分配
,TaskWorker
作为Salve节点,用于执行流task
架构模型
Flink运行时架构主要包括
四个不同的组件,它们会在运行流处理应用程序时协同工作
-
作业管理器
(JobManager) -
资源管理器
(ResourceManager) -
任务管理器
(TaskManager) -
分发器
(Dispatcher)
Flink
是用Java
和Scala
实现的,所以所有组件都会运行在Java虚拟机(JVMs)
上- 当 Flink 集群启动后,首先会启动一个
JobManger
和一个或多个的TaskManager
。- 由 Client 提交任务给
JobManager
,JobManager 再调度任务到各个TaskManager
去执行,- 然后 TaskManager 将
心跳
和统计信息汇报
给JobManager
。- TaskManager 之间以
流的形式
进行数据的传输
。- 上述均为独立的 JVM 进程。
角色分配
图解
JobManager 作业管理器
- 注意
- 1、
JobManager
是控制一个应用程序执行的主进程
,相当于集群的Master节点,且整个集群有且只有一个
活跃的 JobManager - 2、JobManager 负责整个 Flink 集群
任务的调度
以及资源的管理
。 - 3、默认情况下,每个 Flink 集群只有一个 JobManager 实例。可能会产生
单点故障
(SPOF),可配置高可用。
- 说明
- 1、JobManager 作业管理器会先接收到要执行的应用程序
- 包括:作业图(JobGraph)、逻辑数据流图(logicaldataflow graph)和打包了所有的类、库和其它资源的JAR包。
- 2、JobManager 作业管理器会把JobGraph转换成一个物理层面的数据流图
- 这个图被叫做“执行图” (ExecutionGraph),包含了所有可以并发执行的任务。
- 3、JobManager 作业管理器会向
资源管理器
(ResourceManager)请求执行任务必要的资源
- 1、也就是
任务管理器(TaskManager)
上的插槽(slot)
- 2、一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的TaskManager上。
- 4、在运行过程中,作业管理器会负责所有需要中央协调的操作,比如说
检查(checkpoints)的协调
- 描述
- JobManager 负责整个 Flink 集群任务的调度以及资源的管理。
- JobManager 从客户端中
获取
提交的应用,然后根据集群中 TaskManager 上 TaskSlot 的使用情况,为提交的应用分配
相应的 TaskSlot 资源,并命令 TaskManager启动
从客户端中获取的应用。- 当任务完成后,Flink 会将任务执行的
信息反馈
给客户端,并且释放
掉 TaskManager 中的资源以供下一次提交任务使用
ResourceManager 资源管理器
- 注意
- 1、
ResourceManager
主要负责任务管理器(TaskManager)的插槽(slot)
,TaskManager插槽时Flink中定义的处理资源单元 - 2、Flink为不同的环境和资源管理工具
提供了
不同资源管理器比如YARN、Mesos、K8s,以及standalone部署
- 作用
- 1、当JobManager作业管理器
申请插槽资源
时,ResourceManager会将有空闲插槽
的TaskManager分配
给作业管理器。 - 2、如果ResourceManager
没有足够的插槽
来满足作业管理器的请求,它还可以向资源提供平台发起会话
,以提供
启动TaskManager进程的容器 - 3、ResourceManager还负责
终止空闲的TaskManager
,释放计算资源
- 描述
- 1、
管理资源
- 2、为不同环境
提供
各种的资源管理器- 3、
分配
空闲插槽- 4、为满足需求,可向平台
申请资源
- 5、
终止
空闲TaskManager,释放资源
TaskManager 任务管理器
- 注意
-
TaskManager
是Flink中的工作进程,相当于整个集群的 Slave 节点,Flink 集群可存在多个
TaskManager 运行。 - TaskManager 负责具体的
任务执行
和对应任务在每个节点上的资源申请和管理
。
- 描述
- 1、通常在Flink中会有多个TaskManager运行,每一个TaskManager都包含了一定数量的
插槽(slots)
。
- 插槽的数量
限制
了TaskManager能够执行的任务数量。
- 2、启动之后,TaskManager会向资源管理器
注册
它的插槽- 3、收到资源管理器的指令后,TaskManager就会将
一个或者多个
插槽提供
给作业管理器调用。作业管理器就可以向插槽分配任务
- 4、在执行过程中,一个TaskManager
可以
跟其它运行同一应用程序
的TaskManager交换数据
,同时 TaskManager 之间的数据交互都是通过数据流
的方式进行的。
Dispatcher 分发器
- 说明
- 1、
Dispatcher
分发器可以跨作业
运行,它为应用提交提供
了REST接口。 - 2、当一个应用
被提交执行
时,分发器就会启动
并将应用移交
给一个作业管理器。 - 3、由于是REST接口,所以Dispatcher可以作为集群的一个HTTP接入点,这样就能够
不受
防火墙阻挡。 - 4、Dispatcher也会
启动
一个Web UI,用来方便地展示
和监控
作业执行的信息。 - 5、Dispatcher在架构中可能并
不是
必需的,这取决于
应用提交运行的方式
。
到底了