Flink·凯比在同一个没有改变的场地上会引起混乱吗?

q8l4jmvw  于 2021-06-24  发布在  Flink
关注(0)|答案(1)|浏览(168)
dataStream.map(func1).keyBy("key") //(1)
  .process(func2).keyBy("key")     //(2)
  .timeWindow().aggregate(func3).addSink(sink)

方法process()不会更改记录的字段(键)值。假设所有操作符的并行度为2,那么(2)处的keyby()是否也会导致网络洗牌?可能(2)处的keyby()具有转发策略的效果,避免了由于键值不变造成的网络通信开销?
太多了~

k7fdbhmy

k7fdbhmy1#

keyby总是很昂贵的,因为它强制记录通过ser/de。但是如果通信是本地的(即,在同一个任务槽中),那么flink将使用共享缓冲区来通信序列化的字节,而不是通过整个netty tcp堆栈。是的,在你的情况下,第二把钥匙比第一把便宜。但我不会说成本很小。
如果您知道keyby是完全不必要的,那么可以使用reinterpretaskeyedstream重新创建一个 KeyedStream 同样没有任何开销。

相关问题