哪个流碎片可以放置DynamoDB突变?

时间:2016-07-06 17:12:59

标签: amazon-dynamodb amazon-dynamodb-streams

我正在研究将DynamoDB复制到ElasticSearch(ES)中。我们为此目的评估了https://www.elastic.co/guide/en/logstash/current/plugins-filters-json.html,但发现了以下缺点:

  • 在拉模式下的logstash没有HA /故障转移功能。它成为复制的SPOF
  • 因为我们不想在ES索引上进行应用程序级别连接,所以我们希望将多个表合并到一个ES文档中。该插件不提供此用例的功能。

因此,我们正在评估以下两种方法

  1. Lambdas读取DynamoDB流并通过SQS将其推送到ES
  2. 我们自己的DynamoDB流处理器取代AWS lambdas
  3. 现在遇到实际问题:在将数据从Dynamo流复制到ES时,排序非常重要,因为同一实体可能存在多个突变。从Streams / Lambda文档中可以看出,不同流分片中的内容将由lambdas同时处理。

    AWS没有记录(或者至少我无法找到)有关DynamoDB突变如何映射到流分片的详细信息 - 是否与表的哈希键有任何关联,或者它是否是某种类型的bin-打包算法。

    无法控制突变映射到哪个流碎片不能为开发人员提供控制流处理并行化的能力。上面的方法#1可以不按顺序更新相同的ES文档。方法#2可以通过串行处理来解决,但不允许并行化/扩展复制(甚至跨数据分区),因为碎片放置策略没有合约。

    有关如何扩展并使复制适应故障的任何想法?或者有人可以阐明突变如何被放入动力学流分片中?

1 个答案:

答案 0 :(得分:0)

来自AWS(或更多经验)的人应该澄清,但我的理解是每个Dynamo分区最初映射到一个分片。当此分片填满时,将创建子分片。每个分片及其子代由一个KCL工作器按顺序处理。

由于项目的分区键用于决定其desitnation shard,因此同一项目的突变将落在同一个分片(或其子代)中。保证碎片及其子项由单个KCL工作者按正确的顺序处理。每个KCL工作程序也映射到一个lambda实例,因此对于不同的突变,永远不会并行处理相同的项目。

尽管Dynamo流与Kinesis流不同,但阅读K​​inesis文档有助于在拼图中添加一些内容。还有一个有趣的博客,其中包含非常有用的信息。