kafka 消费者

消费者组

kafka 使用消费者组来控制消费组消费,每个消费组都可以消费 topic 的全量信息,消费组内部的消费者再各自进行引流,消费不同的分区信息。

消费者从属于消费组,一个组里的消费者订阅的是相同的主题,每个消费者接收主题一部分的分区的消息。

一个消费者组只有一个消费者的情况

如上图,主题 T1 只有一个消费者组订阅,并且消费者组只有一个消费者,那么这个消费者消费 T1 的所有分区消息。

一个消费者组的消费者数量小于分区数量的情况

如上图,当一个消费者组里的消费者数量小于主题分区的数量,那么每个消费者都会负责消费多个分区的消息

一个消费组的消费者数量等于分区的数量的情况

如图,当一个消费组里的消费者的数量与主题的分区数持平的时候,每个消费者负责一个分区

消费组的消费者数量大于分区数量的情况

如上图,当消费者组里的消费者数量大于分区数量,那么多出来的那一部分消费者就会被闲置,接收不到消息。

因此,最好的情况是组里的消费者的数量和主题分区数持平的情况,这种情况吞吐量最高

多个消费组的情况

当有多个消费组的时候,每个消费组都会全量消费主题的所有分区的消息,如上图,组 1 全量消费主题 T1 的消息,由于组1 的消费者数量和分区数持平,所以每个消费者负责消费一个分区的消息。组 2 也全量消费主题 T1 的消息,但是组 2 只有两个消费者,因此每个消费者负责 2 个分区的消息。

消费者代表什么

在线上环境中,消费者一般是由一个单独的线程开起来的,但是更常见的是在分布式服务场景中,一台服务器开一个线程负责消费消息,多台服务器组成一个消费组。也就是说一个集群组成一个组,集群中的每台机器都是一个消费者,这种组合是最常见的。

分区再均衡

当我们的消费组里的消费者数量少于分区的数量的时候,一个消费者负责多个分区,这时候如果消费速度过慢,我们可以对消费组进行水平扩容,就是增加组内消费者的数量,可以多开几个线程也可以多加几台机器,当然,消费者数量最好和分区数持平,不要超。

当然,在由新的消费者加入群组或者旧的消费者由于某些原因宕机了离开了消费组,就会触发分区再均衡,重新分区每个消费者应该负责的分区,这里要介绍几个概念。

  1. 群组协调器

每个消费者组都有一个群组协调器,由某一台 broker 组成,不同的消费者组可以拥有不同的协调器。

  1. 群主

第一个加入消费者组的消费者会自动成为群主,负责平衡各个消费者的分区的情况,同时与群组协调器进行协调。

具体的工作场景是这样的:

群主会从协调器获取到所有活跃的消费者进行,通过自己的分区策略来给每个消费者进行分区分配,分配好后告诉协调器,协调器再把这些消息告诉每个消费者,消费者只能看到自己负责的消息,群主知道所有消费者的一个情况。这个过程会在再均衡的时候重新发生。

再均衡时机

  • 当有新的消费者加入到组内的时候
  • 消费者崩溃
  • 消费者主动离开群组

独立于群组之外的消费者

kafka 并没有规定必须加入某个群组才能消费消息,消费者可以不指定群组,可以自己指定要消费的主题分区,可以消费某个主题的特定分区&

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值