流中记录的顺序

Vin*_*til 1 apache-flink flink-streaming

这是我的一些查询:

我有两个不同的流stream1stream2其中的元素是按顺序排列的。

1)现在,当我keyBy在这些流中的每一个上执行操作时,顺序会保持不变吗?(由于这里的每个小组将仅发送给一个任务管理器)我的理解是,记录将按小组的顺序排列,请在此处更正。

2)在keyBy两个流上之后,我正在共同分组以获取匹配和不匹配的记录。会将订单也保持在这里?因为这也适用于KeyedStream。我正在使用EventTime,并AscendingTimestampExtractor用于生成timestampwatermark

3)现在,我想matching_nonMatchingStream使用map / flatmap对2)得到的序列执行序列检查。我是否需要再次执行keyBy此处操作,或者如果保持连锁状态,则matching_nonMatchingStream运行是否相同TaskManager?我的理解是,链条将在这里起作用,纠正我,变得困惑。

4)slotSharingGroup-您能否根据文档详细说明:设置此操作的插槽共享组。TaskManager如果可能,在同一插槽共享组中的并行操作实例将位于同一插槽中。

Ste*_*wen 5

关于订购保证

该页面提供了很好的概述和解释,以及订购保证书:https : //ci.apache.org/projects/flink/flink-docs-release-1.0/concepts/concepts.html#parallel-dataflows

要点是:

在每个并行流分区中维护顺序。有关流分区的说明,请参见此处:https : //ci.apache.org/projects/flink/flink-docs-release-1.0/concepts/concepts.html#parallel-dataflows

对于更改分区的“ keyBy()”或“ rebalance()”之类的操作,将按源和目标流分区对的顺序维护,即按发送和接收操作符对的顺序进行维护。

正如Matthias所提到的,如果一个组(由一个键定义,在一个接收目标操作员上运行)从多个发送者那里获取元素,则没有明确定义的元素严格排序。使用事件时间之类的概念,您可以基于数据(附加的时间戳)强加有意义的排序。