一个程序中,不同的算子可能具有不同的并行度。
算子之间传输数据的形式可以是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 过程。
Flink算子之间数据传输形式
最新推荐文章于 2024-04-29 23:26:33 发布