当前位置: 首页 > 知识库问答 >
问题:

Kinesis max shard reads/sec和多个消费者

公孙英飙
2023-03-14

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

共有2个答案

柴瀚
2023-03-14

另一种替代架构是,您可以使用一个kinesis消费者应用程序,将消息从kinesis流推送到SNS主题。当然,如果您的消费者需要“回顾”过去的消息进行处理,这可能不起作用,但只是想将其作为一种选择扔掉。

江永安
2023-03-14

是的,你是对的。

在消费者中,我假设您将使用Amazon Kinesis Client(或KCL: amazon-kinesis-Client)作为API助手;请查看消费者逻辑中有一个参数“idleTimeBetweenReadsInMillis”。它定义了您的html" target="_blank">应用程序将轮询流的次数(此值越低,您的应用程序将轮询的频率越高)。

无论流包含1个shard还是100个shard,对于每个shard,每秒不能发出超过5个“GetRecords”请求。即:;

  • 如果您有一个应用程序,则最多可以使轮询间隔为200ms(理论上)

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

有关Kafka和Kinesis概念之间的示例比较,请参阅此答案:Kinesis Stream上的Kafka类似偏移量?

 类似资料:
  • 问题内容: 我有一个JMS客户端,它正在生成消息并通过JMS队列发送到其唯一的使用者。 我想要的是不止一个消费者收到这些消息。我想到的第一件事是将队列转换为主题,以便现有用户和新用户都可以订阅并将相同的消息传递给他们。 显然,这将涉及在生产者和消费者方面修改当前的客户代码。 我还要查看其他选项,例如创建第二个队列,这样就不必修改现有的使用者。我相信这种方法有很多优点,例如(如果我错了,请纠正我)在

  • 由于消息需求的排序,我们有一个主题和一个分区。我们有两个消费者运行在不同的服务器上,具有相同的配置集,即groupId、consumerId和consumerGroup。即 1主题- 当我们部署消费者时,相同的代码会部署在两台服务器上。当消息到来时,我们会注意到两个消费者都在消费消息,而不是只有一个处理。让消费者在两台独立的服务器上运行的原因是,如果一台服务器崩溃,至少其他服务器可以继续处理消息。

  • 有一个基本示例,它对1个消费者起作用。它接收消息。但是添加一个额外的消费者将被忽略。 consumer2的“22”事件从未引发问题。如果我使用命令行工具检查该主题,则该主题的数据存在

  • 我有一个由第三方发布的JMS队列。我想在不同的机器上设置多个使用者,只有一台特定机器的使用者确认该队列上的消息。简而言之,如果特定机器的使用者没有接收到消息,那么该消息不应从队列中删除。这是可以实现的吗?

  • 我们正在开发一个应用程序,我们想听Kafka中不止一个主题。所有主题都有一个分区。所有主题名称都有一个公共的前缀,例如“test-x”、“test-y”,所以我们可以对它使用spring。 我们希望编写一个java spring使用者,它使用模式监听所有主题。我们的想法是,我们可以运行同一个消费者(属于同一个组)的多个实例,Kafka将为不同的消费者分发来自不同主题的消息。 然而,这似乎并不奏效。

  • 假设我们有一个AWS FIFO SQS队列和两个消息生产者A和B。每条消息都发送了一个等于生产者名称的组ID。换句话说,生产者A将组ID“A”添加到每条消息中,生产者B将组ID“B”添加到每条消息中。我们还有3个消费者X、Y和Z正在使用可见性超时的消息。让我们假设队列中有5条消息——3条来自生产者A的消息和2条来自生产者B的消息。见下图 考虑到给定的条件,我们将有以下工作流程: 其中一个消费者,例