本文介绍flink所需的四大组件JobManager、ResourceManager、TaskManager、Dispatcher。应用部署方式和任务执行。
01
—
Flink组件介绍
JobManager
(1)控制单个应用程序的执行
(2)是一个工作进程
(3)每个应用都由一个JobManger管理:类似spark中AppMaster
(4)接收需要执行的应用JobGraph和打包所有类库、资源、jar
(5)将JobGraph转换成名为ExecutionGraph的物理DataFlow图
(6)向ResourceManger申请执行任务需要的资源TaskManager处理槽slot
(7)当资源满足就会将任务分发给TaskManager
(8)执行过程中负责协调工作:如创建检查点
2. ResourceManager
(1)管理Flink的处理资源单元
(2)当收到JobManager申请TaskManager处理槽时,ResourceManager会告诉JobManager哪些TaskManager可以使用
(3)如果不满足需求,ResourceManager会向资源提供者通信,申请更多TaskManager
(4)ResourceManager还负责终止闲置的TaskManager
3.TaskManager
(1)是一个工作进程
(2)通常启动多个TaskManager
(3)每个TaskManager提供一定数量slot
(4)处理槽的个数说明了TaskManager的处理能力
(5)执行期间,同一个应用,不同任务在TaskManager内会有数据交换
4.DisPatcher
(1)会跨多个作业运行
(2)提供REST接口来提交执行的应用
(3)一旦提交一个应用,就会启动一个JobManager,并将应用转交给它
(4)Dispatcher这一集群的HTTP入口可以受到防火墙的保护
(5)Dispatcher还会启动一个WebUI,用来提供有关作业执行的信息。
(6)也可以不用Dispatcher来提交应用
02
—
Flink的2种部署模式
1.框架模式
(1)Flink应用打包成JAR文件
(2)通过客户端提交到运行的服务,如:Dispatch、JobManager、YARN
(3)运行的服务接收Flink应用,并确保其执行。
2.库模式
(1)Flink会绑定到一个特定的容器镜像(Docker)中
(2)镜像中包含着运行JobManager以及ResourceManager代码
(3)容器启动后会自动加载JobManager和ResourceManager,并将绑定的作业提交执行
(4)另一个和作业无关的镜像负责部署TaskManager
(5)容器通过镜像启动后会自动运行TaskManager,TaskManager向ResourceManager注册
(6)外部资源管理框架好处:负责镜像启动,并在发生故障时候容器能够重启
03
—
任务执行
1. TaskManager上算子运行
(1)可以同时执行多个任务
(2)每个TaskManager可以有多个Slot
(3)每个Slot可执行应用的一部分,但是每个Slot中只能有一个同样的算子
(4)TaskManager中的多个任务可以在同一个进程内高效地执行,数据交换无需访问网络
(5)任务过于集中,使得TaskManager负载过高,从而导致性能下降
(6)后面控制任务调度会讲到
2.TaskManager运行
(1)TaskManager会在同一个JVM进程内以多线程方式执行任务
(2)和独立进程相比,线程更加轻量级并且通信开销更低
(3)但是无法严格隔离任务
(4)只要有一个任务运行异常,就可能杀死TaskManager,导致TaskManager上的所有任务失败
(5)可以将TaskManager配置成一个TaskManager有一个Slot
(6)通过在TaskManager内部采用线性并行级每个主机上多部署TaskManager
04
—
高可用性设置
1.TaskManager故障
(1) 假设Flink应用设置包含4个TaskManager,每个TaskManager包含2个Slot,那么这个流式应用最多支持8个并行度来运行。
(2)如果一个TaskManager出现故障,JobManager将向ResourceManager申请资源,如果没有得到资源,那么JobManager将无法重启。
(3)应用重启策略将决定JobManager以何种方式重启。后面会将重启策略
2.JobManager故障
(1)采用高可用HA,由ZooKeeper来完成选举
(2)JobGraph写入一个远程持久存储系统中,将地址写入ZooKeeper
(3)在检查点即将完成的时候,如果所有任务将各自状态写入远程存储,JobManager会将句柄写入远程存储,并将地址写入ZooKeeper
(4)发生故障,所有JobManager下的任务自动取消
(5)新的JobManager接收工作,向ZooKeeper请求存储位置,Jar、JobGraph及应用检查点
(6)向ResourceManager申请资源
(7)重启,并利用最近一次检查点重置任务状态
3.容器环境
通常自动重启TaskManager和JobManager
05
—
总结
flink的4大组件:JobManager、ResourceManager、TaskManager、Dispatcher的作用
Flink的2种部署模式:框架模式和库模式
任务执行过程
高可用设置:TaskManager故障和JobManager故障,从2种故障中恢复。
感谢阅读!
希望能够分享、点赞、收藏!
奇迹的出现往往就在再坚持一下的时候!