Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flink Flink中键控流中记录的排序_Apache Flink_Flink Streaming - Fatal编程技术网

Apache flink Flink中键控流中记录的排序

Apache flink Flink中键控流中记录的排序,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我有一条记录按顺序到达的流。我应用了一个map函数,然后在上面使用keyBy函数。是否会在具有相同密钥的每个记录流中维护记录的顺序 在这方面也有类似的问题。但我对这里给出的答案和下面从链接“”复制的描述感到困惑 在重新分配交换中,元素之间的顺序仅保留在每对发送和接收子任务中(例如,map()的子任务[1]和keyBy/window的子任务[2])。因此,在本例中,每个键内的顺序保持不变,但并行性确实引入了关于不同键的聚合结果到达接收器的顺序的不确定性。” 在给出的示例中,keyBy的子任务[2]

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

在这方面也有类似的问题。但我对这里给出的答案和下面从链接“”复制的描述感到困惑

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


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

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

为了说明这一点,假设以下场景:您有两个map子任务
map1
map2
以及两个sink子任务
sink1
sink2
。在映射器和接收器之间有一个
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)}

不失一般性,让我们看一下代码< SKK1 < /代码>的顺序。您可以说,来自同一生产子任务的所有事件的到达顺序与它们的生产顺序相同。因此,

(1,A)
将在
(1,C)
之前到达。但是,您无法说出来自不同生成子任务的事件之间的顺序。所以你不知道
(1,A)
是否在
(1,U)
之前到达