当前位置: 首页 > 知识库问答 >
问题:

流中记录的排序

荣德厚
2023-03-14

以下是我的一些疑问:

我有两个不同的流,元素按顺序排列。

1)现在,当我在这些流中的每一个上执行keyBy时,会维护顺序吗?(因为这里的每个组都将仅发送给一个任务管理器)我的理解是,记录将是一个组的顺序,在这里纠正我。

2) 在这两个流上执行按键操作后,我正在进行联合分组,以获取匹配和非匹配记录。这里也会维持秩序吗?,因为这也适用于KeyedStream。我正在使用事件时间(EventTime)和上升时间(AscendingTimestampExtractor)生成时间戳(timestamp)和水印(watermark)。

3) 现在,我想使用map/flatmap对我从2)获得的匹配非匹配流执行序列检查。我是否需要在此处再次执行按键,或者如果我保留在链中,匹配的非匹配流是否会在相同的TaskManager中运行?我在这里的理解是,链将在这里工作,请纠正我,我感到困惑。

4) 插槽共享组(slotSharingGroup)-请您根据doc:设置此操作的插槽共享组来描述更多信息。如果可能,同一插槽共享组中的并行操作实例将位于同一个TaskManager插槽中。

共有2个答案

汪和悌
2023-03-14

1) 是和否。Flink使用所谓的水印来跟踪订单。这样可以确保将记录分配到正确的窗口,并且在所有数据可用之前不会关闭窗口。但是,不能保证每个组都有严格的顺序(因为并行传入数据)。在组之间,根本没有订购保证。

2) 与(1)的答案基本相同。

3) 无需再次使用按键。默认情况下,将链接平面地图。

4)见https://ci.apache.org/projects/flink/flink-docs-release-1.0/internals/general_arch.html#the-processes

淳于知
2023-03-14

本页提供了良好的概述和解释,以及订购保证:https://ci.apache.org/projects/flink/flink-docs-release-1.0/concepts/concepts.html#parallel-数据流

要点是:

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

对于更改分区的“keyBy()”或“重新平衡()”等操作,顺序按每对源流和目标流分区维护,即按每对发送和接收运算符维护。

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

 类似资料:
  • 我有一个记录按顺序到达的流。我应用了一个map函数,然后在上面应用了keyBy函数。在每个具有相同键的记录流中,记录的顺序是否会保持? 在按顺序排列记录方面也存在类似的问题。但是我对这里给出的答案和下面从链接“https://ci.apache.org/projects/flink/flink-docs-release-1.2/concepts/programming-model.html”中复制

  • 问题内容: 我有两个与ElasticSearch有关的问题。 1)有什么方法可以指定我想要特定字段的结果以降序排列吗?等效SQL查询为: 2)如何获得第一和最后(最新)记录? 问题答案: 1)Elasticsearch具有相当完善的Sorting API ,可让您控制排序顺序。因此,在elasticsearch中,等效于您的MySql查询如下所示: 排序也可以在_search URI上指定。 2)

  • 我在一个网络流量项目中遇到了一个场景,它卡住了我,因为我还是项目反应器的新手。 代码如下: 我的问题是: 作为通量。第7行中的flatMap是异步处理,可能使用不同于父Mono stream的多线程运行,因此我在第4行中使用concurrentHashMap,在第12行中使用原子操作,以保证inputArg中的共享映射上的同步操作。 但是 > 在单因素作用下发生变化的内在机制。平面图(第2行)对第

  • 给定:我在Kafka中有两个主题,假设主题A和主题B。Kafka流从主题A中读取一条记录,对其进行处理,并产生与所消耗记录相对应的多条记录(假设recordA和recordB)。现在的问题是我如何使用Kafka流来实现这一点。 在这里,读取的记录是消息;处理之后,它返回一个消息列表。如何将此列表划分为两个生产者流?任何帮助都将不胜感激。

  • 我正在使用Custom GridView,其中我有2列图像。当我将网格向下滚动到下一条记录并返回到第一行记录时,我的记录从它的位置移到一行。 意味着,当视图在getview()中重新生成时,GridView记录会从一列洗牌到另一列记录。 请推荐我。 如图所示:

  • 问题内容: 我有一个运行的服务,该服务接受约1,000,000词典的列表,并执行以下操作 因此,如果我有以下词典列表: 我最终 和 然后,我需要对每个myLists词典中的所有数据进行排序。 我目前正在做的事情如下所示: 当我有100,000条左右的记录时,这种方法效果很好,但是,如果有1,000,000条记录,则至少需要5-10分钟才能对每条记录进行排序,总共需要16条记录(我的原始词典列表实际