• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Kafka 的消费者组

武飞扬头像
Pseudocode
帮助1

消费者组是什么

消费者组(Consumer Group)是 Kafka 的重要特性之一,简而言之,消费者组就是让若干个消费者实例(Consumer Instance)形成一个消费者组,共同消费共同消费同一个或者多个 Topic 的不同 Partition 中的消息,注意,每一个 Partition 只能由消费者组中的一个 Consumer 来消费。

多个消费者组之间是相互独立的,它们可以订阅同样的主题进行消费。

消费者组如何工作

当一个消费者组订阅了一个或者多个 Topic 的时候,这些 Topic 中所有的 Partition 会被「分配」给消费者组中的消费者实例,这些消费者实例各自处理自己分配到的分区的消息。

前面介绍过,一个分区只能分配给一个消费者实例,不能被多个实例同时消费,同时,一个实例可能被分配多个分区。

举一个具体的例子。假设一个消费者组订阅了 T1、T2、T3 三个 Topic,他们中分别有3个、5个、10个分区,加起来一共18个分区。此时:

  • 如果消费者组中正好有18个实例,那么,每个实例负责消费一个分区的消息。
  • 如果消费者组中的实例数超过了总的分区数,比如有20个实例,那么将会有2个实例是空闲的,什么都不做,除非有其他实例挂掉触发 Rebalance。
  • 如果消费者组中有 6 个实例,那么每个实例会被分配3个分区。

因此,推荐消费者组中的实例数与订阅的 Topic 的总分区数相同。

Rebalance

上一部分提到了 Rebalance 机制,它是 Kafka 中将消息分区分配给消费者组中的消费者实例的机制。上面的例子中,将 18 个分区分配给 6 个消费者实例的过程,就是 Rebalance。除了在消费者组订阅 Topic 后需要进行这样的分配,还有一些情况会触发 Relalance:

  1. 消费者组中的实例发生变化的时候,包括但不限于个别消费者实例宕机、有新的实例加入、有实例被踢出等等情况。此时,因为有些分区对应的消费者实例不在组中了,或者有新的实例可以「分担」其他实例的工作,那么,此时会触发 Rebalance。
  2. 订阅的主题发生变更的时候。因为消费者组可以通过匹配表达式来订阅主题,比如,订阅所有以 abc 开头的主题。当有新的主题被创建,如果这个主题的名称是以 abc 开头的,那么,消费者组会自动消费这个主题,此时,就需要重新分配分区和消费者实例的关系。
  3. 主题的分区发生变化的时候,无论分区数增多还是减少,都需要重新分配消费者实例,以达到均衡。

当以上因素出现的时候,Rebalance 机制能都实现自动并且尽可能均衡的分配,但是,目前它还有一些问题。

第一,当执行 Relalance 的时候,消费者组中所有消费者实例都会停止对消息的消费,知道 Rebalance 工作完成。这类似于垃圾回收器中经常会提到了 stop-the-world,因此,要尽可能避免频繁地 Rebalance。

第二,目前的 Rebalance 操作十分「不智能」,每次 Rebalance 操作都会将所有的分区进行重新分配,而不是采取尽量减少变动的方式,这一问题导致在分区数和消费者实例数比较多的情况下, Rebalance 操作是一个耗时的操作,因此,再次建议,要尽可能避免频繁地 Rebalance。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhffcejk
系列文章
更多 icon
同类精品
更多 icon
继续加载