Flink(4)运行时架构

Flink 运行时的组建

  • 作业管理器: JobManager
  • 任务管理器: TaskManager
  • 资源管理器:ResourceManager
  • 分发器:Dispacher

作业管理器(JobManager)

  • 控制一个应用程序执行的主进程,也就是说,每个应用程序都会被不同的JobManager所控制
  • jobManager 会先接受到要执行的应用程序,这个应用程序会包括:作业图(JobGraph),逻辑数据图(logical dataflow graph)和打包了所有的类库和其他资源的JAR包。
  • JobManager 会向资源管理器请求执行任务必要的资源,也就是任务管理器上的插槽(slot),一旦他获得足够的资源,就会将执行图分发到真正运行他们的TaskManager上,而运行过程中,jobManager会负责所需要的中央协调的操纵,比如说检查点(checkpoints)协调。

任务管理器 (TaskManager)

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

资源管理(ResourceManager)

  • 主要负责管理 ,任务管理器的插槽(slot),TaskManager插槽是Flink中定义的处理资源单元。
  • Flink 为不同的环境和资源管理工具提供了不同的资源管理器,比如 YARN,K8s,以及 Standalone部署。

分发起(Dispatcher)

  • 可以跨作业运行,他为应用提供了REST接口,
  • 当一个应用被提交执行的时候,他就会启动并将应用移交给一个JobManager.
  • 他会启动一个 Web UI,方便展示信息

任务提交流程

任务提交流程.png

任务提交流程 (Yarn)

任务提交流程(Yarn).png

任务提交原理

任务调度原理.png

并行度

一个特定算子的子任务的个数被称为其并行度。一般情况下,
一个stream的并行度,可认为就是其所有算子中最大的并行度


并行度.png

TaskManager 和 Slots

  • Flink 中每个TaskManager 都是JVM进程,
    它可能会在独立的线程上执行一个或多个子任务
  • 为了控制一个TaskManager 能接受多少个Task,TaskManager通过
    task slot 来进行控制(一个TaskManager 至少有一个slot)
    taskManager和slot.png

    TaskManager和slot(2).png

    设置 slot 共享组
.slotSharingGroup("red")

结果: 默认的共享组是"default",设置不同的共享组后,整个计算任务会 ,比之前会占多个slot

例如:


并行子任务的分配.png

flink 子任务的分配

flink子任务分配.png

flink子任务分配2.png

flink 的执行步骤图

flink执行步骤图.png

数据传输形式

一个程序中,不同的算子可能具有不同的并行度
算子之间的传输数据的形式可以是 one-to-one (forwarding)的模式
也可以是 redistributing的模式,具体是哪一种形式,取决于算子的种类

one-to-one :

stream维护着分区以及元素的顺序(比如source 和map),着意味着map
算子的子任务生产的元素的个数以及顺序跟source算子的子任务生产的元素的个数 ,顺序相同。
map,fliter,flatMap 等算子都是 one-to-one的对应关系

redistributing:

stream的分区会发生改变。,每个算子的子任务依据所选择的transformation
发送数据到不同的目标任务。例如,keyBy基于hashCode 重分区,而broadcast 和 rebalance
会随机重新分区。这些算子都会引起redistribute过程,而redistribute过程
就类似于spark中的shuffle过程。

任务链

任务链0.png

任务链.png

你可能感兴趣的:(Flink(4)运行时架构)