gpt4 book ai didi

apache-flink - Flink 键控流中记录的排序

转载 作者:行者123 更新时间:2023-12-02 03:55:12 26 4
gpt4 key购买 nike

我有一个记录按顺序到达的流。我应用了一个 map 函数,然后在其上应用了 keyBy 函数。记录的顺序是否会在每个记录流中使用相同的键来维护?

Ordering of Records in Stream中也有类似的问题.但是我对那里给出的答案和从链接“https://ci.apache.org/projects/flink/flink-docs-release-1.2/concepts/programming-model.html”复制的以下描述感到困惑。

"在重新分配交换中,元素之间的顺序仅保留在每对发送和接收子任务中(例如,map() 的子任务 [1] 和 keyBy/window 的子任务 [2])。所以在这个例如,保留了每个键内的顺序,但并行性确实引入了关于不同键的聚合结果到达接收器的顺序的不确定性。”

在给出的示例中,keyBy 的子任务[2] 从 map 的子任务[1] 和子任务[2] 中接收元素。如果仅在子任务之间维护排序,如何保留每个键中的排序?

最佳答案

keyBy 操作仅维护来自同一子任务的事件的顺序。对于来自不同子任务的事件,Flink 不给你任何顺序保证。

为了说明这一点,假设以下场景:您有两个 map 子任务 map1map2 以及两个接收器子任务 sink1sink2。在映射器和接收器之间有一个 keyBy 操作。

map1 产生以下事件序列 (1, A), (2, B), (1, C), (2, D)map2 生成 (1, U), (1, V), (2, W), (2, X) 其中第一个元组条目是我们的键。这意味着 sink1 将接收集合 {(1, A), (1, C), (1, U), (1, V)}sink2 接收集合 {(2, B), (2, D), (2, W), (2, X)}

不失一般性,我们看一下sink1的顺序。您可以说的是,来自同一生产子任务的所有事件都按照与生产时相同的顺序到达。因此,(1, A) 将在 (1, C) 之前到达。但是,您不能说出来自不同生成子任务的事件之间的顺序。所以你不知道 (1, A) 是否在 (1, U) 之前到达。

关于apache-flink - Flink 键控流中记录的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44156774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com