Kinesis 分片与许多生产者

Kinesis shard with many producers

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

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

您应该有一个 Web 服务,可以从您的客户端接收数据并将它们发送到 Kinesis。此 Web 服务器可以使用 Kinesis Producer Library (KPL),它在消息传输率、超时、策略重试和可扩展性方面提供最佳性能。 KPL 可以创建许多 worker,并且可以进行调整以优化消息速率,并且不会超过 Kinesys Shards 施加的写入限制。

在性能、维护成本和交付方面,让每个客户端都将数据发送到 Kinesis 可能有点矫枉过正。 如果客户端开始以高速流量发送数据会怎样?分片有写入操作的速率限制(最多 1,000 Record/s,数据写入速率最多 1 MB/s)。 'aggressive' 客户端可能会产生突发流量并使分片暂时不响应,并阻止所有其他发送应存储在同一分片中的记录的客户端。

此外,想想成千上万的客户的交付成本。如果您想更改流名称会怎样?或更改 accessID/密钥?或者只是从 kinesis 切换到 kafka?您必须管理数千个客户端的更新。

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