Amazon dynamodb DynamoDB突变被放置到哪个流碎片?

Amazon dynamodb DynamoDB突变被放置到哪个流碎片?,amazon-dynamodb,amazon-dynamodb-streams,Amazon Dynamodb,Amazon Dynamodb Streams,我正在研究将DynamoDB复制到ElasticSearch(ES)中。为此,我们评估了,但发现以下缺点: 拉模式下的日志存储没有HA/故障切换功能。它成为复制的SPOF 由于我们不希望在ES索引上执行应用程序级联接,因此我们希望将多个表合并到一个ES文档中。该插件不提供此用例的功能 因此,我们正在评估以下两种方法 Lambdas读取DynamoDB流并通过SQS将其推送到ES 我们自己的DynamoDB流处理器将取代AWS lambdas 现在来看实际问题:排序对于将数据从Dynamo流复

我正在研究将DynamoDB复制到ElasticSearch(ES)中。为此,我们评估了,但发现以下缺点:

  • 拉模式下的日志存储没有HA/故障切换功能。它成为复制的SPOF
  • 由于我们不希望在ES索引上执行应用程序级联接,因此我们希望将多个表合并到一个ES文档中。该插件不提供此用例的功能
因此,我们正在评估以下两种方法

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

    AWS没有记录(或者至少我没有找到)DynamoDB突变如何映射到流碎片的细节——是否与表的散列键相关,或者是否是某种装箱算法

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

    关于如何扩展并使复制具有故障恢复能力,您有什么想法吗?或者有人能解释一下突变是如何被放入dynamodb流碎片的吗

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

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

    虽然Dynamo streams与Kinesis streams不同,但阅读Kinesis文档有助于在拼图中放置一些片段。还有一个有趣的博客,里面有非常有用的信息


    这是几个月前的事;你有没有找到这个问题的答案?