2

我正在考虑将 DynamoDB 复制到 ElasticSearch (ES) 中。为此,我们评估了logstash 输入插件,但发现了以下缺点:

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

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

  1. Lambda 读取 DynamoDB 流并通过 SQS 将其推送到 ES
  2. 我们自己的 DynamoDB 流处理器来代替 AWS lambdas

现在来到实际问题:排序对于将数据从 Dynamo 流复制到 ES 很重要,因为同一实体可能有多个突变。从 Streams/Lambda 文档中提到,不同流分片中的内容将由 lambdas 并发处理。

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

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

关于如何扩展并使复制对故障具有弹性的任何想法?或者有人可以阐明如何将突变放入 dynamodb 流分片中?

4

1 回答 1

0

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

由于项目的分区键用于决定其目标分片,因此同一项目的突变将落在同一个分片(或其子分片)中。一个分片及其子分片保证由一个 KCL 工作人员以正确的顺序进行处理。每个 KCL 工作人员还映射到一个 lambda 实例,因此永远不会针对不同的突变并行处理相同的项目。

尽管 Dynamo 流与 Kinesis 流不同,但阅读 Kinesis 文档有助于解决一些问题。还有一个有趣的博客,其中包含非常有用的信息。

于 2016-10-16T03:02:36.420 回答