未更改的同一字段上的 Flink 键比会导致洗牌吗?

  • 本文关键字:Flink 字段 apache-flink shuffle
  • 更新时间 :
  • 英文 :

dataStream.map(func1).keyBy("key") //(1)
.process(func2).keyBy("key")     //(2)
.timeWindow().aggregate(func3).addSink(sink)

方法process((不会更改记录的字段(键(值。假设所有运算符的并行度都是2,那么(2(处的keyBy((是否也会导致网络洗牌?也许(2(处的keyBy((由于键值不变而具有避免网络通信成本的正向策略的效果?

太多了~

keyBy总是很昂贵,因为它强制记录通过ser/de。但是,如果通信是本地的,即在同一个任务槽内,那么Flink将使用共享缓冲区来通信序列化的字节,而不是通过整个netty tcp堆栈。是的,在你的情况下,第二个keyBy比第一个便宜。但我不会说成本很小。

如果您知道keyBy是完全不必要的,那么您可以使用reexplateAsKeyedStream重新获得KeyedStream,而不需要任何开销。

最新更新