知识卡片
算子链形成的具体条件
内容
[[算子链如何减少线程切换开销|算子链]]并不是只要相邻就会自动合并,而是需要同时满足一组具体条件:上下游算子并行度必须一致,下游节点入度必须为1(即它只有这一个上游,没有被多个上游同时喂数据),上下游必须处于同一个Slot Group中,下游算子的链接策略必须是ALWAYS,上游算子的链接策略必须是ALWAYS或HEAD,两个算子之间的数据分区方式必须是forward(不涉及重分区),并且用户没有显式禁用链接。这份条件清单说明”能不能合并成一条链”本质上是在问”这两个算子之间是否存在任何需要跨线程/跨分区协调的理由”——只要有一条不满足(比如并行度不同、或中间插入了keyBy导致需要重分区),就必须老老实实地拆成独立的任务,靠网络或线程间队列传递数据。
参考来源
《Flink入门与实战》第8章《并行》