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

使用比分区更多的消费者的持续消费者组再平衡

奚光霁
2023-03-14

给定以下设置:

  • Kafkav0.11.0.0
  • 3个经纪人
  • 2个主题,每个主题有2个分区,复制因子为3
  • 2个消费者组,每个主题一个
  • 3个包含使用者的服务器

服务器包含两个使用者,每个主题一个,这样:

    null
    null
    null
  • 消费者-B1被分配到topic-1分区-1
  • 消费者-C1被分配到topic-1分区-0
  • 消费者-A1没有分配给分区

这似乎正如我们所料。由于分区计数为2,我们只有两个活动消费者。第三个消费者只是闲着。我们能够很好地消费来自主题的消息。

接下来,我们关闭服务器B(它被主动分配到一个分区)。这样做时,我们将期望topic-1-group进入rebalancing,并期望consumer-A1将取代consumer-B1,并被分配到一个分区,如下所示为真:

    null

问题

  • 这是有效的使用方案吗?
  • 在这种情况下需要什么?
  • 消费者会有问题吗?(在配置方面,除了设置主题、消费者组等基本设置之外,我们对所有内容都使用默认值。我们使用kafkaconsumer.subscribe(集合),而不是手动分配分区)
  • 经纪人/动物园管理员会有问题吗?

共有1个答案

陈法
2023-03-14

(我将作为一个答案发布,因为我没有足够的冷静来评论。这可能是“答案”,尽管是一个不令人满意的答案:用户多于分区不是支持的配置)。

根据kafka文档:https://kafka.apache.org/documentation.html#简介,通过在主题中引入并行性(分区)的概念,kafka能够在使用者进程池上提供排序保证和负载平衡。这是通过将主题中的分区分配给使用者组中的使用者来实现的,这样每个分区就可以被组中的一个使用者使用。通过这样做,我们确保使用者是该分区的唯一读取者,并按顺序使用数据。由于有许多分区,这仍然平衡了许多使用者实例的负载。但是请注意,使用者组中的使用者实例不能多于分区。

虽然在实践中,额外的消费者一直处于闲置状态,直到一个活跃的消费者离开,但它似乎有时会处于一种永久重新平衡的状态。

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

  • null 我在这一页上读到以下内容: 使用者从任何单个分区读取,允许您以与消息生成类似的方式扩展消息消耗的吞吐量。 也可以将使用者组织为给定主题的使用者组-组内的每个使用者从唯一分区读取,并且组作为一个整体使用来自整个主题的所有消息。 如果使用者多于分区,则某些使用者将空闲,因为它们没有可从中读取的分区。 如果分区多于使用者,则使用者将从多个分区接收消息。 如果使用者和分区的数量相等,则每个使用者

  • 谁能请解释和指导我链接或资源阅读关于Kafka消费者如何在下面的场景下工作。 > 一个有5个消费者的消费者组和3个分区的主题(Kafka是如何决定的) 一个消费者组有5个消费者,主题有10个分区(kafka如何分担负载) 两个消费者组和两个服务器的kafka集群,其中一个主题被划分在节点1和节点2之间,当来自不同组的消费者订阅到一个分区时,如何避免重复。 上面可能不是配置kafka时的最佳实践,但

  • 是否有一种方法以编程方式访问和打印使用者滞后偏移,或者说使用者读取的最后一条记录的偏移与某个生产者写入该使用者分区的最后一条记录的偏移之间的位置差。 要知道我的最终目标是将这个值发送到prometheus进行监视,我应该在上面添加哪些语句来得到滞后偏移值?

  • 有人能告诉我Kafka消费者的再平衡算法是什么吗?我想了解分区计数和消费者线程是如何影响这一点的。 非常感谢。

  • 我正在使用Spring Kafka consumer,它从主题中获取消息并将其保存到数据库中。如果满足故障条件,例如db不可用,kafka消费者库是否提供重试机制?如果是,是否有方法设置不同的重试间隔,如第1次重试应在5分钟后进行,第2次重试应在30分钟后进行,第3次重试应在1小时后进行等。