2017-08-04 55 views
0

我打算使用其数据需要同步到CloudSearch的DynamoDB。我知道Lambda可以使用,但我想为此使用Kinesis。所以生产者将是DynamoDB,它将为表中的每个PUT/DELETE生成数据流。AWS kinesis,如何确保在使用多个分片时订购的邮件传递

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

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

我有想知道KCL如何确保在消费者端有序交付记录时,如果有多个碎片存在的话。从API文档,这就是我理解

  1. 我们需要创建一个每个碎片迭代器,使用GetShardIterator
  2. 随着该碎片迭代器,我可以在一个特定的序列碎片的所有项目。

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

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

回答

0

如果我的想法是正确的,那么我如何才能实现有序接收两个碎片?

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

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

使用KCL:

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

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