【问题标题】:AWS kinesis, how it ensures ordered delivery of messages if multiple shards are usedAWS kinesis,如果使用多个分片,它如何确保消息的有序传递
【发布时间】:2017-08-04 13:06:40
【问题描述】:

我打算使用 DynamoDB,其数据需要同步到 CloudSearch。我知道可以使用 Lambda,但我想为此使用 Kinesis。所以 Producer 是 DynamoDB,它会为表中的每个 PUT/DELETE 生成流数据。

我的设计非常简单: (假设消费者有序接收记录)

  • 接收记录
  • 同步到 CloudSearch
  • (重复)

当存在多个分片时,我无法弄清楚 KCL 如何确保在消费者端有序交付记录。从 API 文档中,这是我的理解

  1. 我们需要使用 GetShardIterator 创建每个分片的迭代器
  2. 使用分片迭代器,我可以按特定顺序获取该分片的所有项目。

但是,如果我想将数据从 DynamoDB 同步到 CloudSearch,那么我需要确保所有记录都以完全相同的顺序同步。这就是我感到困惑的地方:

  1. 物品可以同时放入不同的分片吗?
  2. (如果 1 为真),那么如果我有两个 Shard,每个 Shard 都需要一个 ShardIterator 对吗?
  3. (如果 1,2 为真)如果我需要确保所有记录都以有序的方式同步,那么我只需要一个线程,它以正确的顺序获取记录,不是吗?
  4. 如果我的想法是正确的,那么我如何才能通过两个分片实现有序接收?

【问题讨论】:

    标签: amazon-kinesis


    【解决方案1】:

    如果我的想法是正确的,那我怎么能用两个分片实现有序接收?

    您不会自己进行同步。相反,您需要仔细考虑并选择一个分区键,以便可以独立处理形成的分区。

    例如您正在索引记录,并且记录有一个 id 字段。如果您可以同时更新搜索索引中具有不同 id 的记录,那么记录 id 将是一个合适的字段作为分区键。

    使用 KCL:

    它提供记录排序,以及以相同顺序读取和/或重播记录到多个 Amazon Kinesis 应用程序的能力。 Amazon Kinesis 客户端库 (KCL) 将给定分区键的所有记录提供给同一记录处理器,从而更轻松地构建从同一 Amazon Kinesis 流读取的多个应用程序(例如,执行计数、聚合和过滤)。

    https://aws.amazon.com/kinesis/streams/

    【讨论】:

      猜你喜欢
      • 2017-10-16
      • 2016-04-02
      • 1970-01-01
      • 2020-06-09
      • 2017-10-02
      • 2019-08-24
      • 2020-03-28
      • 2023-02-24
      • 1970-01-01
      相关资源
      最近更新 更多