多个实例使用的小型表上的Dynamo流

时间:2016-12-06 10:39:54

标签: amazon-web-services amazon-dynamodb amazon-dynamodb-streams

我使用dynamodb存储应用程序的配置,这种配置很可能每天更改几次,并且将按数十行的顺序排列。我的应用程序将部署到许多EC2实例。我最终将编写另一个应用程序以允许管理配置,同时通过直接在AWS控制台中对表进行更改来管理配置。

我正在尝试使用dynamo流来监视配置的更改,当应用程序接收要处理的记录时,它只是重新读取整个发电机表。

这在本地工作,当部署到一个实例时,但当我将它部署到三个实例时,它永远不会初始化IRecordProcessor,也不会对表进行任何更改。

我怀疑这是因为该表只有一个分片,the number of instances should not exceed the number of shards(至少对于kinesis流,我知道kinesis和dynamo stream实际上是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基础架构)?我将调查触发器。

1 个答案:

答案 0 :(得分:0)

我最终通过在设置EC2MetadataUtils.getInstanceId时将实例ID(KinesisClientLibConfiguration)添加到流名称来解决此问题,因此为每个实例设置了新流。这确实导致为每个实例设置一个单独的dynamo表,现在我需要在新实例上重新启动应用程序时删除旧表。

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