Flink框架:算子链的介绍
本文重点
在Flink中,算子链(Operator Chain)是一种优化技术,用于将多个算子连接在一起形成一个链式结构,以减少数据序列化和网络传输开销,提高整体的处理性能。
流的两种传输模式
数据在算子之间的传输模式有两种:一对一(one-to-one)的直通 (forwarding)模式和重分区(redistributing)模式。
一对一
一对一模式下,数据流维护着分区以及元素的顺序,也就是说同一分区的数据只会进入到下游算子的同一分区。如图所示,source算子和map算子之间就是一对一的关系。map算子的子任务输出数据以及顺序和source算子的子任务输出的数据以及顺序是完全一致的,从而保证着“一对一”的关系。map、filter、flatMap 等算子都是这种 one-to-one 的对应关系。
要想满足一对一,首要前提是两个算子间的并行度要是一样的。
重分区
重分区模式下,数据流的分区会发生改变,上游的数据会进入到下游的不同分区中。如图所示map() 和 keyBy/window 之间,以及 keyBy/window 和 Sink 之间就是重分区关系。每个算子子任务也会根据不同的 transfor