Kinesis max shard读取/秒和多个消费者

时间:2017-05-23 13:51:21

标签: amazon-web-services sharding amazon-kinesis

所以我有一个AWS Kinesis流,我为多个消费者发布事件。对于大多数人来说,接收热数据非常重要 - 这意味着他们中的许多人可能会同时轮询和阅读最新数据。根据AWS文档,增加分片数量将增加并行度,而读取/秒数可以是每个分片最多5个/秒。我的问题是,是否(以及如何?)添加更多分片有助于我所有的消费者都是最新的并尝试从同一个分片中读取新的传入数据的情况?似乎每秒读取限制会自动引入对您可以拥有的消费者数量的限制(至少当他们需要随时更新时),或者我是否遗漏了某些内容?

2 个答案:

答案 0 :(得分:3)

是的,你是对的。

在消费者中,我假设您将使用Amazon Kinesis Client(或KCL:​​amazon-kinesis-client)作为API助手;并且请看一下参数" idleTimeBetweenReadsInMillis"在消费者逻辑中。这定义了您的应用程序将轮询多少流量(此值越低,您的应用将更频繁地轮询)。

无论您的信息流包含1个分片还是100个分片,您都不能超过5" GetRecords"每个分片的每秒请求数。那是;

  • 如果您有1个应用程序,则最多可以使轮询间隔为200毫秒(理论上)。
  • 如果您有2个应用程序,则最低可达400毫秒。
  • 如果您有3个应用程序,则最低可达600毫秒。
  • 或者使用您的3个应用程序,其中两个可以在1000毫秒内轮询,最后一个可以以333毫秒的速率轮询。

您还可以自己创建Kafka群集并对其性能进行基准测试。卡夫卡可能会提高吞吐量。

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

答案 1 :(得分:0)

另一种替代架构是让您拥有一个kinesis消费者应用程序,该应用程序将消息从kinesis流推送到SNS主题。当然,如果您的消费者需要回顾'过去的消息要处理,这可能不起作用,但只是想把它作为一种选择。