Kinesis 最大分片读取次数/秒和多个使用者

use*_*968 2 sharding amazon-web-services amazon-kinesis

因此,我有一个 AWS Kinesis 流,我可以在其中为多个使用者发布事件。对于他们中的大多数人来说,接收热数据很重要——这意味着他们中的许多人可能会同时轮询和读取最新数据。根据 AWS 文档,增加分片数量将提高并行度,而每秒读取次数最多可达每个分片每秒 5 次。我的问题是,添加更多分片是否(以及如何?)有助于解决所有消费者都是最新的并尝试从同一分片读取新传入数据的情况?似乎每秒读取的限制会自动引入对您可以拥有的消费者数量的限制(至少当它们需要随时更新时),或者我错过了什么?

az3*_*az3 6

是的你是对的。

在消费者中,我假设您将使用 Amazon Kinesis Client (或 KCL:amazon-kinesis-client)作为 API 帮助程序;请注意消费者逻辑中有一个参数“ idleTimeBetweenReadsInMillis ”。这定义了您的应用程序将轮询流的次数(该值越低,您的应用程序轮询的频率就越高)。

无论您的流包含 1 个分片还是 100 个分片,每个分片每秒发出的“ GetRecords ”请求都不能超过 5 个。那是;

  • 如果您有 1 个应用程序,您最多可以将轮询间隔设置为 200 毫秒(理论上)。
  • 如果您有 2 个应用程序,则至少可以为 400 毫秒。
  • 如果您有 3 个应用程序,则至少可以为 600 毫秒。
  • 或者,对于 3 个应用程序,其中两个可以以 1000 毫秒的速率进行轮询,最后一个可以以 333 毫秒的速率进行轮询。

您还可以为自己创建一个 Kafka 集群并对其性能进行基准测试。Kafka 可能会提供更高的吞吐量。

请参阅此答案,了解 Kafka 和 Kinesis 概念之间的示例比较:Kafka like offset on Kinesis Stream?