我正在考虑将 DynamoDB 复制到 ElasticSearch (ES) 中。为此,我们评估了logstash 输入插件,但发现了以下缺点:
- 拉模式下的 logstash 没有 HA/故障转移功能。它成为用于复制的 SPOF
- 由于我们不想在 ES 索引上进行应用程序级别的连接,我们希望将多个表合并到一个 ES 文档中。该插件不为此用例提供功能。
因此,我们正在评估以下两种方法
- Lambda 读取 DynamoDB 流并通过 SQS 将其推送到 ES
- 我们自己的 DynamoDB 流处理器来代替 AWS lambdas
现在来到实际问题:排序对于将数据从 Dynamo 流复制到 ES 很重要,因为同一实体可能有多个突变。从 Streams/Lambda 文档中提到,不同流分片中的内容将由 lambdas 并发处理。
AWS 没有记录(或者至少我无法找到)有关 DynamoDB 突变如何映射到流分片的详细信息 - 是否与表的哈希键有任何关联,或者它是否是某种装箱算法。
无法控制突变映射到哪个流分片不会为开发人员提供控制流处理并行化的能力。上面的方法 #1 可能会乱序更新相同的 ES 文档。方法 #2 可以通过串行处理来解决,但由于分片放置策略没有约定,因此不允许并行化/复制规模(甚至跨数据分区)。
关于如何扩展并使复制对故障具有弹性的任何想法?或者有人可以阐明如何将突变放入 dynamodb 流分片中?