Kinesis碎片与许多生产者

时间:2016-09-22 12:06:41

标签: amazon-kinesis aws-iot

我需要从大量数据源(例如手机)收集数据。例如,1,000部电话,每20分钟上传一批1MB。我想使用带有单个分片的Kinesis流来摄取数据(总吞吐量大约为1MB / s)。 各个手机直接访问Kinesis API是否有意义,或者我应该将自己的前端(例如,Web服务器)放在前面?做出这个决定时要记住的主要限制/考虑因素是什么?

P.S。使用AWS IoT基础设施的替代方案将更加昂贵

1 个答案:

答案 0 :(得分:3)

您应该拥有一个从您的客户端接收数据的Web服务,并将其发送给Kinesis。此Web服务器可以使用Kinesis Producer Library(KPL),它在消息传递,超时,策略重试和可伸缩性方面提供最佳性能。 KPL可以创建许多工作人员,可以调整以优化消息速率,而不是超过Kinesys Shards强加的写入限制。

每个向kinesis发送数据的客户在性能,价格和交付方面都可能过度。 如果客户端开始以高速率流量发送数据会发生什么?分片具有写入操作的速率限制(最高1,000记录/秒,数据写入速率高达1 MB /秒)。 一个积极的'客户端可以生成eccessive流量并使分片暂时不响应,并阻止发送应存储在同一分片中的记录的所有其他客户端。

此外,请考虑数千名客户的交付成本。如果要更改流名称会发生​​什么?或更改accessID /密钥?或者只是从kinesis切换到kafka?您必须管理数千个客户的更新。

使用Web服务器,您可以隐藏复杂性并使任何更改对客户端透明。您可以考虑直接在EC2中运行Web服务。让生产者直接在AWS中减少网络延迟。此外,您可以利用AWS提供的所有可伸缩性/弹性/容错功能。