Flink任务调度原理之逻辑数据流与执行图

一、逻辑数据流(DataFlow)

1.1 Flink程序由什么组成?

前几篇文章讲解了Flink的运行流程,与TaskManager与Slots,那么一个Flink程序究竟如何去写,它又是由什么所组成的呢?老规矩先上图:
在这里插入图片描述
看了这个图相信大家对Flink Streaming Dataflow的了解又多了一点 。
没错所有的Flink程序都是由三部分组成的: Source 、Transformation和Sink。
Source负责读取数据源Transformation利用各种算子进行处理加工Sink负责输出

1.2 什么是Dataflows

其实在运行时,Flink上运行的程序会被映射成“逻辑数据流”(dataflows),它包含了这三部分。每一个dataflow以一个或多个sources开始以一个或多个sinks结束。dataflow类似于任意的有向无环图(DAG)。在大部分情况下,程序中的转换运算(transformations)跟dataflow中的算子(operator)是一一对应的关系,但有时候,一个transformation可能对应多个operator。上图:
在这里插入图片描述

二、执行图(ExecutionGraph)

上面已经介绍了Flink程序直接映射成的数据流图StreamGraph,也被称为逻辑流图,因为它们表示的是计算逻辑的高级视图。为了执行一个流处理程序,Flink需要将逻辑流图转换为物理数据流图(也叫执行图),详细说明程序的执行方式。上图:
在这里插入图片描述
看不懂没关系,这不是还有解释吗!!

  • Flink 中的执行图可以分成四层:StreamGraph -> JobGraph -> ExecutionGraph -> 物理执行图
    • StreamGraph:是根据用户通过 Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构
    • JobGraph:StreamGraph经过优化后生成了 JobGraph,提交给 JobManager 的数据结构。主要的优化为,将多个符合条件的节点 chain 在一起作为一个节点,这样可以减少数据在节点之间流动所需要的序列化/反序列化/传输消耗
    • ExecutionGraph:JobManager 根据 JobGraph 生成ExecutionGraph。ExecutionGraph是JobGraph的并行化版本,是调度层最核心的数据结构
    • 物理执行图:JobManager 根据 ExecutionGraph 对 Job 进行调度后,在各个TaskManager 上部署 Task 后形成的“图”,并不是一个具体的数据结构。

猜你喜欢

转载自blog.csdn.net/qq_39657909/article/details/105957694