执行图和任务链
程序与数据流(DataFlow)
所有的flink执行程序大体可以分为三部分:
-
Source 负责读取数据源
-
Transformation 利用各种算子进行处理加工
-
Sink 负责输出
在运行时,Flink 上运行的程序会被映射成“逻辑数据流”(dataflows),它包
含了这三部分。每一个dataflow 以一个或多个sources 开始以一个或多个sinks 结
束。dataflow 类似于任意的有向无环图(DAG)。在大部分情况下,程序中的转换
运算( transformations)跟dataflow 中的算子(operator)是一一对应的关系,但有时候,一个transformation 可能对应多个operator。执行图(ExecutionGraph)
- Flink 中的执行图可以分成四层:StreamGraph -> JobGraph >ExecutionGraph -> 物理执行图
数据传输形式
- 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 过程。
任务链(Operator Chains)
条件:
- 相同并行度
- one to one
本文转载于我的个人博客Flink的运行架构(二)
遵循 CC 4.0 BY-SA 版权协议