流媒体中的网络随机播放

Network shuffle in streaming

因此,keyBygroupBy 导致重新分区流的网络随机播放。据说很贵,因为它涉及到网络通信以及序列化和反序列化等

例如,如果我 运行 以下运算符:

map(Mapper1).keyBy(0).map(Mapper2)

并行度为 2,我会得到这样的结果:

Mapper1(1) -\-/- Mapper2(1)
             X
Mapper1(2) -/-\- Mapper2(2)

最后 Mapper1 中具有相同键的所有记录都分配给 Mapper2 中的相同分区。

我的问题是:

我想知道在 keyBygroupBy 期间发生了什么。每个处理过的元素都由每个子任务序列化和反序列化?如何比较 keyBygroupBy 与另一个操作的成本?

此外,我熟悉批处理系统中分区器的概念,但是当我尝试在流式处理中应用它时,我有点困惑。

谢谢!

所以Apache Flink会缓存一个任务的输出,然后将其发送到下一个任务进行处理。 setBufferTimeout 是作业级别的参数,可以通过 StreamExecutionEnvironment 配置,此超时的默认值为 100 毫秒。这段时间之后,即使缓冲区未满,也会自动发送缓冲区。

此外,以下链接对理解细节也很有帮助:

https://flink.apache.org/2019/06/05/flink-network-stack.html

https://flink.apache.org/2019/07/23/flink-network-stack-2.html