我正在研究如何将DynamoDB复制到ElasticSearch (ES)中。为此,我们对logstash输入插件进行了评估,但发现了以下缺点:
因此,我们正在评估以下两种方法
现在来看实际的问题:排序在将数据从Dynamo流复制到ES中很重要,因为同一个实体可能有多个突变。从Streams/Lambda文档中可以看到,不同流碎片中的内容将由Lambda并发处理。
AWS没有记录(至少我还没有找到) DynamoDB突变是如何映射到流碎片的详细信息--不管是与表的哈希键有任何关联,还是某种装箱算法。
没有控制哪个流碎片,一个突变被映射到,并不提供开发人员控制流处理并行化的能力。上面的方法#1可以按顺序更新相同的ES文档。方法2可以通过串行处理来解决问题,但不允许并行化/复制的规模(甚至跨数据分区),因为碎片放置策略上没有契约。
对于如何进行扩展以及如何使复制具有抗故障能力,有什么想法吗?或者有人能说明突变是如何放置到dynamodb流碎片中的?
发布于 2016-10-16 03:02:36
来自AWS (或更多经验)的人应该澄清,但我的理解是,每个Dynamo分区最初映射到一个碎片。当这个碎片填满时,将创建子碎片。每个碎片及其子程序由一个KCL工作人员依次处理。
因为一个项目的分区键用于决定它的分解碎片,同一项的突变将落在同一个碎片(或其子部分)中。一个碎片及其子程序保证由一个KCL工人按正确的顺序处理。每个KCL工作人员还映射到单个lambda实例,因此同一项将不会因不同的突变而被并行处理。
虽然Dynamo流与Kinesis不同,但阅读Kinesis文档有助于在拼图中找到一些片段。还有一个有趣的博客,里面有非常有用的信息。
https://stackoverflow.com/questions/38229846
复制相似问题