Kinesis 最大分片 reads/sec 和多个消费者
Kinesis max shard reads/sec and multiple consumers
所以我有一个 AWS Kinesis 流,我可以在其中为多个消费者发布事件。对他们中的大多数人来说,接收热数据很重要——这意味着他们中的许多人可能会同时轮询和读取最新数据。根据 AWS 文档,增加分片数量将提高并行度,而 reads/sec 的数量最多为每个分片 5/秒。我的问题是添加更多分片是否(以及如何?)有助于我的所有消费者都是最新的并尝试从同一分片读取新传入数据的情况?似乎这种每秒读取限制会自动引入对您可以拥有的消费者数量的限制(至少在他们需要随时更新时),或者我错过了什么?
是的,你是对的。
在消费者中,我假设您将在消费者逻辑中使用 Amazon Kinesis 客户端(或 KCL:amazon-kinesis-client) as API helper; and please take a look that there is a parameter "idleTimeBetweenReadsInMillis”。这定义了您的应用程序将轮询流的程度(此值越低,越多您的应用程序将频繁轮询)。
无论您的流包含 1 个分片还是 100 个分片,每个分片每秒发出的请求不能超过 5 个“GetRecords”。即;
- 如果您有 1 个应用程序,您最多可以将轮询间隔设置为 200 毫秒(理论上)。
- 如果您有 2 个应用程序,则最少需要 400 毫秒。
- 如果您有 3 个应用程序,则最少可以为 600 毫秒。
- 或者对于您的 3 个应用程序,其中两个可以 1000 毫秒进行轮询,最后一个可以 333 毫秒的速率进行轮询。
您还可以为自己创建一个 Kafka 集群并对其性能进行基准测试。 Kafka 可能会提供更高的吞吐量。
请参阅此答案以了解 Kafka 和 Kinesis 概念之间的示例比较:
另一种替代架构是让您拥有一个运动消费者应用程序,它将消息从运动流推送到 SNS 主题。当然,如果您的消费者需要 'look back' 处理过去的消息,这可能行不通,但只是想将其作为一种选择。
所以我有一个 AWS Kinesis 流,我可以在其中为多个消费者发布事件。对他们中的大多数人来说,接收热数据很重要——这意味着他们中的许多人可能会同时轮询和读取最新数据。根据 AWS 文档,增加分片数量将提高并行度,而 reads/sec 的数量最多为每个分片 5/秒。我的问题是添加更多分片是否(以及如何?)有助于我的所有消费者都是最新的并尝试从同一分片读取新传入数据的情况?似乎这种每秒读取限制会自动引入对您可以拥有的消费者数量的限制(至少在他们需要随时更新时),或者我错过了什么?
是的,你是对的。
在消费者中,我假设您将在消费者逻辑中使用 Amazon Kinesis 客户端(或 KCL:amazon-kinesis-client) as API helper; and please take a look that there is a parameter "idleTimeBetweenReadsInMillis”。这定义了您的应用程序将轮询流的程度(此值越低,越多您的应用程序将频繁轮询)。
无论您的流包含 1 个分片还是 100 个分片,每个分片每秒发出的请求不能超过 5 个“GetRecords”。即;
- 如果您有 1 个应用程序,您最多可以将轮询间隔设置为 200 毫秒(理论上)。
- 如果您有 2 个应用程序,则最少需要 400 毫秒。
- 如果您有 3 个应用程序,则最少可以为 600 毫秒。
- 或者对于您的 3 个应用程序,其中两个可以 1000 毫秒进行轮询,最后一个可以 333 毫秒的速率进行轮询。
您还可以为自己创建一个 Kafka 集群并对其性能进行基准测试。 Kafka 可能会提供更高的吞吐量。
请参阅此答案以了解 Kafka 和 Kinesis 概念之间的示例比较:
另一种替代架构是让您拥有一个运动消费者应用程序,它将消息从运动流推送到 SNS 主题。当然,如果您的消费者需要 'look back' 处理过去的消息,这可能行不通,但只是想将其作为一种选择。