因此,keyBy
或groupBy
会导致网络重排,从而对流进行重新分区。据说它非常昂贵,因为它涉及网络通信以及序列化和反序列化等。
例如,如果我运行以下运算符:
map(Mapper1).keyBy(0).map(Mapper2)
具有2的并行度,我会得到这样的东西:
Mapper1(1) -\-/- Mapper2(1)
X
Mapper1(2) -/-\- Mapper2(2)
最后,Mapper1
中所有具有相同键的记录都分配给Mapper2
中的同一分区。
我的问题是:
我想知道流keyBy
或groupBy
期间发生了什么。每个子任务都会对每个处理过的元素进行序列化和反序列化?如何比较keyBy
或groupBy
与另一个操作的成本?
此外,我熟悉批处理系统中分区器的概念,但是当我尝试将其应用于流式处理时会感到困惑。
谢谢!
答案 0 :(得分:1)
因此,Apache Flink缓冲任务的传出,然后将其发送到下一个任务进行处理。 Uri.fromFile(File(path))
是作业级别的参数,可以通过setBufferTimeout
进行配置,该超时的默认值为100毫秒。在此时间之后,即使缓冲区未满,也会自动发送缓冲区。
此外,以下链接对于了解详细信息确实很有帮助:
https://flink.apache.org/2019/06/05/flink-network-stack.html
https://flink.apache.org/2019/07/23/flink-network-stack-2.html