当前位置:网站首页>Flink运行架构
Flink运行架构
2022-08-09 17:16:00 【锋火连天】
Flink运行架构
1.Flink运行时的组件
Flink运行时架构主要包括四个不同的组件,它们会在运行流处理应用程序时协同工作:作业管理器(JobManager)、资源管理器(ResourceManager)、任务管理器(TaskManager),以及分发器(Dispatcher)。因为Flink是用Java和Scala实现的,所以所有组件都会运行在Java虚拟机上。每个组件的职责如下:
作业管理器(JobManager)
控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的JobManager所控制执行。JobManager会先接收到要执行的应用程序,这个应用程序会包括:作业图(JobGraph)、逻辑数据流图(logical dataflow graph)和打包了所有的类、库和其它资源的JAR包。JobManager会把JobGraph转换成一个物理层面的数据流图,这个图被叫做“执行图”(ExecutionGraph),包含了所有可以并发执行的任务。JobManager会向资源管理器(ResourceManager)请求执行任务必要的资源,也就是任务管理器(TaskManager)上的插槽(slot)。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的TaskManager上。而在运行过程中,JobManager会负责所有需要中央协调的操作,比如说检查点(checkpoints)的协调。
资源管理器(ResourceManager)
主要负责管理任务管理器(TaskManager)的插槽(slot),TaskManger插槽是Flink中定义的处理资源单元。Flink为不同的环境和资源管理工具提供了不同资源管理器,比如YARN、Mesos、K8s,以及standalone部署。当JobManager申请插槽资源时,ResourceManager会将有空闲插槽的TaskManager分配给JobManager。如果ResourceManager没有足够的插槽来满足JobManager的请求,它还可以向资源提供平台发起会话,以提供启动TaskManager进程的容器。另外,ResourceManager还负责终止空闲的TaskManager,释放计算资源。
任务管理器(TaskManager)
Flink中的工作进程。通常在Flink中会有多个TaskManager运行,每一个TaskManager都包含了一定数量的插槽(slots)。插槽的数量限制了TaskManager能够执行的任务数量。启动之后,TaskManager会向资源管理器注册它的插槽;收到资源管理器的指令后,TaskManager就会将一个或者多个插槽提供给JobManager调用。JobManager就可以向插槽分配任务(tasks)来执行了。在执行过程中,一个TaskManager可以跟其它运行同一应用程序的TaskManager交换数据。
分发器(Dispatcher)
可以跨作业运行,它为应用提交提供了REST接口。当一个应用被提交执行时,分发器就会启动并将应用移交给一个JobManager。由于是REST接口,所以Dispatcher可以作为集群的一个HTTP接入点,这样就能够不受防火墙阻挡。Dispatcher也会启动一个Web UI,用来方便地展示和监控作业执行的信息。Dispatcher在架构中可能并不是必需的,这取决于应用提交运行的方式。
2.Flink集群部署到YARN上提交流程

会有如下的提交流程:
1)Flink任务提交后,Client向HDFS上传Flink的Jar包和配置,
2)之后向Yarn ResourceManager提交任务,ResourceManager分配Container资源并通知对应的NodeManager启动ApplicationMaster,
3)ApplicationMaster启动后加载Flink的Jar包和配置构建环境,然后启动JobManager
4)之后ApplicationMaster向ResourceManager申请资源启动TaskManager,ResourceManager分配Container资源后,由ApplicationMaster通知资源所在节点的NodeManager启动TaskManager,
5)NodeManager加载Flink的Jar包和配置构建环境并启动TaskManager
6)TaskManager启动后向JobManager发送心跳包,并等待JobManager向其分配任务。
3.Flink任务调度原理

客户端不是运行时和程序执行的一部分,但它用于准备并发送dataflow(JobGraph)给Master(JobManager),然后,客户端断开连接或者维持连接以等待接收计算结果。
当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager。由 Client 提交任务给 JobManager,JobManager 再调度任务到各个 TaskManager 去执行,然后 TaskManager 将心跳和统计信息汇报给 JobManager。TaskManager 之间以流的形式进行数据的传输。上述三者均为独立的 JVM 进程。
Client 为提交 Job 的客户端,可以是运行在任何机器上(与 JobManager 环境连通即可)。提交 Job 后,Client 可以结束进程(Streaming的任务),也可以不结束并等待结果返回。
JobManager 主要负责调度 Job 并协调 Task 做 checkpoint,职责上很像 Storm 的 Nimbus。从 Client 处接收到 Job 和 JAR 包等资源后,会生成优化后的执行计划,并以 Task 的单元调度到各个 TaskManager 去执行。
TaskManager 在启动的时候就设置好了槽位数(Slot),每个 slot 能启动一个 Task,Task 为线程。从 JobManager 处接收需要部署的 Task,部署启动后,与自己的上游建立 Netty 连接,接收数据并处理。
边栏推荐
- The most complete architect knowledge map in history
- JSDN blog system
- What are some good open source automation testing frameworks to recommend?
- JSDN博客系统
- Self-taught software testing, how far can I go out to find a job?
- win10 uwp 获取指定的文件 AQS
- 动态RDLC报表(七)
- ceph集群部署
- 【工业数字化大讲堂 第二十期】制造业数字化能力建设分享,特邀制造业高级咨询顾问 李东老师分享
- Jenkins deploys services to remote servers using pipelines
猜你喜欢

2022秋招面试宝典,啃完面试稳了

传统数据中台又贵又复杂?何不试一试永久免费的下一代数据中台

The principle implementation of handwritten flexible.js, I finally understand the multi-terminal adaptation of the mobile terminal

李乐园:iMetaLab Suite宏蛋白质组学数据分析与可视化(视频+PPT)

JVM:(八)运行时数据区之方法区

ref的使用

Detailed explanation of JVM memory model and structure (five model diagrams)

JMeter笔记6 | JMeter录制(配置代理)

如何在 PC 机上测试移动端的网页?

The most complete architect knowledge map in history
随机推荐
Unity webgl 关于适配网页 ,并且用到js中的SetTimeOut和SetInterval()
学长告诉我,大厂MySQL都是通过SSH连接的
ARM Assembly Basics
win10 uwp 模拟网页输入
2022秋招面试宝典,啃完面试稳了
Simple prohibition of garbage collection in d
The difference between approach and method
华为发布「国产Copilot内核」PanGu-Coder,而且真的能用中文哦!
方舟:生存进化开服务器端口映射教程
Volatile:JVM 我警告你,我的人你别乱动
一口气拿下6个大厂offer,是什么水平
Cortex-A7 MPCore 架构
What is test development and why is it so popular now?
Apache Doris 社区 PMC 杨政国:开源项目如何在自身和社区的需求中取得平衡?
谭中意:你知道 “开源女王” 是谁吗?
win10 uwp 自定义控件 SplitViewItem
win10 uwp 绑定静态属性
API接口是什么?API接口常见的安全问题与安全措施有哪些?
Prometheus full installation
动态RDLC报表(六)