1

我正在使用dynamodb来存储应用程序的配置,这种配置可能会每天更改几次,并且数量级将为几十。我的应用程序将部署到许多EC2实例。我最终将编写另一个应用程序以允许管理配置,同时通过在AWS控制台中直接更改表来管理配置。多个实例消耗的小型表上的Dynamo流

我想使用发电机流来监视配置的变化,当应用程序收到要处理的记录时,它只是重新读取整个发电机表。

这适用于本地和部署到一个实例,但是当我将它部署到三个实例时,它永远不会初始化IRecordProcessor,并且不会对表进行任何更改。

我怀疑这是因为表只有一个碎片,并且the number of instances should not exceed the number of shards(至少对于kinesis流,我知道kinesis和dynamo流实际上是different)。

我知道如何拆分kinesis流中的碎片,但似乎无法找到一种方法来为发电机流做到这一点。我读到,其实the number of shards in a dynamo stream is equal to the number of partitions in the dynamo table,你可以increase the number of partitions by increasing read/write capacity。我不想增加吞吐量,因为这样会很昂贵。

  1. 请问碎片数量应该多于实例数的条件是否也适用于dyanmo流?如果是这样,是否有另一种方法来增加碎片的数量,如果没有,是否有一个众所周知的原因,当多个实例读取时,小型表上的发电机流失败?
  2. 有没有更好的方式来存储和观看这样的配置(理想情况下使用AWS基础架构)?我要调查触发器。

回答

0

我终于解决了这个通过设置KinesisClientLibConfiguration时添加的实例ID(EC2MetadataUtils.getInstanceId)到流名字,所以一个新的流设置为每个实例。这确实会导致为每个实例设置单独的发电机表,现在我需要在新实例上重新启动应用程序时删除旧表。

我也联系了AWS的支持,并收到了this的回复。

+0

您是否知道在使用DynamoDB Streams时是否受到Lambda尊重的碎片?即碎片总是被一个消费者依次消费?在我的[问题]中的更多细节(http://stackoverflow.com/questions/41527444/dynamodb-streams-with-lambda-how-to-process-the-records-in-order-by-logical-gr/)。 – AlfredBaudisch