【Flink系列一】Flink运行时四大组件

简介:

Flink 运行时架构主要包括四个不同的组件,它们会在运行流处理应用程序时协同工作:作业管理器(JobManager)、资源管理器(ResourceManager)、任务管理器(TaskManager),以及分发器(Dispatcher)。因为 Flink 是用 Java 和 Scala 实现的,所以所有组件都会运行在Java 虚拟机上。

作业管理器(JobManager)

  • 控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的JobManager所控制
  • JobManager会先接收到要执行的应用程序,这个应用程序会包括:作业图(JobGraph)、逻辑数据流图(logical dataflow graph)和打包了所有的类、库和其他资源的JAR包
  • JobManager会把JobGraph转换成物理层面的数据流图,这个图被叫做‘执行图’(Execution Graph),包含了所有可以并发执行的任务
  • JobManager会向资源管理器(ResourceManager)请求执行任务必要的资源,也就是任务管理器(TaskManager)里面的插槽(slot)。一旦获取到了足够的资源,就会讲执行图分发到真正运行它们的TaskManager上。而在运行过程中,JobManager会负责所有需要中央协调的操作,比如检查点(checkpoint)的协调

任务管理器(TaskManager)

  • Flink中的工作进程(JVM进程)。通常在Flink中会有多个TaskManager的运行,每一个TaskManager都包含一定数量的插槽(slots),插槽的数量限制了TaskManager能够执行任务的数量
  • 启动之后,TaskManager会向资源管理器注册它的插槽;收到资源管理器的指令后,TaskManager就会将一个或多个插槽提供给JobManager调用,JobManager就可以向插槽分配任务(tasks)来执行了
  • 在执行过程中,一个TaskManager和其他运行同一应用程序的TaskManager交换数据(称为跨TaskManager之间的数据交换)

资源管理器(ResourceManager)

  • 主要负责管理任务管理器(TaskManager)的插槽(slot),slot是Flink中定义的处理资源的最小单元
  • Flink为不同的环境和资源管理工具提供了不同的资源管理器,比如yarn、mesos、k8s以及standalone部署
  • 当JobManager申请slot资源时,ResourceManager会将有空闲的TaskManager分配给JobManager。如果ResourceManager没有足够的slot来满足JobManager的请求,她还可以向资源提供平台发起会话,以提供启动TaskManager进程的容器

分发器(Dispatcher)

  • 可以跨作业运行,它为应用题叫提供了REST接口
  • 当一个应用被提交执行时,分发器就会分发并将应用移交给一个JobManager
  • Dispatcher也会启动一个WebUI,用来方便的战士和监控作业的执行
  • Dispatcher在架构中可能并不是必须的,这取决于应用提交运行的方式。

任务提交的过程中,四大组件是如何协调工作的

standalone模式下

1、提交应用 (可以是webUI提交,或者指令提交)

2、启动并提交应用

3、请求slots(请求需要的内存资源)

4、启动(需要TM先启动,将资源注册到RM)

5、注册slots

6、发出slots的指令

7、提供slots

8、提交要在slots中执行的任务

9、交换数据(分为跨TM的交换、TM内的交换---后续文章补充)

完成

YARN模式下

1、上传Flinkjar包和配置

2、提交JOB

3、启动ApplicationMaster(JobManager),起了一个集群

4、申请slot资源(向yarn的RM申请资源)

5、 启动TM(包含注册slots和分配slots过程,和standalone一致)

6、执行任务

结束

任务调度原理

--参考官网的图片

  1. Program Code --写的java或者scala代码
  2. Optimizer / Graph Builder ---程序代码会被转位一个有向无环图(DAG)
  3. Client --将job提交给JobManager,JobManager会返回一些状态给Client
  4. 到JobManager后,JM(JobManager缩写)会将Job生成一个逻辑数据流图(logical dataflow graph)和打包了所有的类、库和其他资源的JAR包,最终生成‘执行图’(Execution Graph),包含了所有可以并发执行的任务
  5. 作业会被分发到TM上的slots上执行(具体需要多少slots取决于job的执行图)
  6. TM与JM有状态的一些状态的同步。

思考两个问题:

1、如何计算job到底需要占多少个slot?

2、一个流处理到底需要包含多少个任务呢?

下节我们一起来探讨一下

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周润发的弟弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值