【问题标题】:Amazon Kinesis and guaranteed orderingAmazon Kinesis 和保证订购
【发布时间】:2017-01-07 20:54:26
【问题描述】:

亚马逊声称他们的 Kinesis 流媒体产品保证了记录订购。

它提供记录的排序,以及以相同顺序读取和/或重放记录的能力 (...)

Kinesis 由 Streams 组成,这些 Streams 本身由一个或多个 Shards 组成。记录存储在这些分片中。我们可以编写连接到 Shard 的消费者应用程序,并按照记录的存储顺序读取/重放记录。

但是 Kinesis 能否保证开箱即用地为 Stream 本身进行排序,而不将排序逻辑推送给消费者?消费者如何从同一个 Stream 的多个 Shard 中读取记录,并确保这些记录按照添加到 Stream 中的相同顺序读取?

【问题讨论】:

    标签: amazon-web-services amazon amazon-kinesis


    【解决方案1】:

    这似乎是不可能实现的。在分片级别上保证排序,但不是在所有流中。

    https://brandur.org/kinesis-order

    回到我们最初的问题:我们如何保证所有 记录的消费顺序与它们产生的顺序相同吗?这 答案是我们不能,但我们不应该让那不幸 现实太困扰我们了。一旦我们将流扩展到多个 分片,没有任何机制可以用来保证记录 在整个流中按顺序消耗;只在一个单一的 分片。

    【讨论】:

    • 我可以确认,官方 AWS 大数据专业课程的培训材料中也提到了这一事实。
    • 比 Kafka 更糟糕:当 put 快速连续发生时,不能保证返回的序列号会增加,因为 put 操作与 Kinesis Data Streams 基本上是同时发生的。要确保严格增加同一分区键的序列号,请使用 SequenceNumberForOrdering 参数,如 PutRecord 示例代码示例中所示。哇...超载任何人??
    【解决方案2】:

    如果您需要保证流中所有数据的顺序,您只能拥有一个分片。当然,这不能很好地扩展。您需要确定的是您是否真的需要该级别的有序数据。流中的所有数据是否与所有其他数据相关?关键是当数据相关时将数据放入分片中。使用多个分片以允许并行处理您的数据。如果所有相关数据都在一个分片中,您可以利用保证排序。如果您确实需要对所有数据进行排序,那么您只需要处理随之而来的有限缩放即可。

    【讨论】:

      【解决方案3】:

      enter image description here

      虽然不确定。

      但在这里我猜他们是说在多个分片之间可以进行排序。

      我希望数据流意味着分片的逻辑分组。 因此,如果这是真的,那么我想订购是可能的。

      请检查确认

      【讨论】:

      • 请将该图片的内容作为文本包含在您的帖子中。
      猜你喜欢
      • 2019-04-28
      • 2018-02-18
      • 2020-05-25
      • 2020-06-03
      • 2023-03-13
      • 2011-08-03
      • 2016-03-11
      • 2014-08-25
      • 1970-01-01
      相关资源
      最近更新 更多