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

有序流的Flink保证

尤俊誉
2023-03-14

从我对Flink的一点经验来看,我已经注意到,即使我们有按顺序到达的事件,它们也应该在对顺序进行分区之后到达。这里讨论的是:流中记录的排序

所以我有3个问题延伸了上面提到的问题:

>

  • 我仍然不清楚keyBy函数后订单丢失的原因。为什么会发生这种情况?

    是否有办法确保即使在分区之后事件的顺序?

    如果我们不创建KeyedStreams,那么每个并行操作符的事件顺序是否有保证?

  • 共有1个答案

    夏宪
    2023-03-14

    我认为这里可能有一些误解。我将尝试在这里重新澄清一些事情:

    对于从具有相同密钥的同一运算符发出的元素,将保留元素的排序。但是,在分区后的接收端,如果您使用接收到的相同密钥对所有记录进行说明,则没有任何严格的排序,这仅仅是因为保证了每个并行运算符的排序。

     类似资料:
    • 我想根据id加入Customer和Address对象。这些是我对kafka stream for Customer主题的输入 和以下fro地址 我使用了间隔连接以及使用TumblingEventTimeWindows和滑动窗口的JoinFunction,但它没有连接客户和地址流。我不明白我在代码中遗漏了什么。

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

    • 我一直在关注Flink 1.14中针对有界数据的不同全局数据排序选项。我发现Stackoverflow和其他网站上关于这个的很多问题都是好几年前的问题了,关于不推荐使用的API或者没有完全回答这个问题。由于Flink正在快速发展,我想问一下最新稳定的Flink (1.14)中的可用选项。 以下是我如何理解当前的情况(这可能是错误的)。我的问题也附上。Flink 有两个 API —— 和 , 它们可

    • 我已经讨论了一些相关问题,比如如何确保java8流中的处理顺序?,我仍然不完全清楚输出元素的顺序。因此,请澄清我的以下疑问。 我认为至少在理论上(或根据java规范),它可以按1、2、3、4、5、6、7、8以外的随机顺序打印。我说得对吗? 还有一个相关的问题——遭遇订单保存的决定是在执行的哪个点做出的?更准确地说,在执行开始之前,是否通过检查源、中间操作和终端操作的特性来评估整个流水线的订单特性?

    • 我有2个数据流,我将其连接并输入到一个CoFlatMap函数中。我需要能够在两个不同的数据流上测试生成消息,但在消息到达时进行协调。在Flink如何做到这一点?

    • null 其中lambda1、2等是条件检查函数,例如 但不知什么原因对我不起作用,也许还有其他方法?正如我从文档(https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/side_output.html)中了解到的,OutputTag用于创建标记为tag的附加消息。还是我错了?