在相同字段上的Flink keyby是否会造成随机播放?

问题描述 投票:1回答:1
dataStream.map(func1).keyBy("key") //(1)
  .process(func2).keyBy("key")     //(2)
  .timeWindow().aggregate(func3).addSink(sink)

方法process()不会更改记录的field(key)值。假设所有运算符的并行度是2,(2)处的keyBy()是否还会导致网络混乱?也许由于(2)的keyBy()由于密钥值不变,所以具有转发策略的效果,从而避免了网络通信成本?]

非常感谢〜

apache-flink shuffle
1个回答
2
投票

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

[如果您知道完全不需要keyBy,则可以使用reinterpretAsKeyedStream重新获得KeyedStream,而无需承担任何开销。

© www.soinside.com 2019 - 2024. All rights reserved.