带你认识kafka消费者组

本文介绍了Kafka消费者组的工作原理,通过单播和多播实验展示了消息如何在消费者间分配。当topic分区数少于消费者数时,部分消费者无法消费;当分区数等于消费者数时,每个消费者均能消费部分数据。此外,还探讨了消费者组的创建、删除及查询等管理操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

消费者组(consumer group)是kafka提供的可扩展且具有容错性的消费者机制。既然是一个组,那么组内必然可以有多个消费者或消费者实例(consumer instance),它们共享一个公共的ID,即group ID。组内的所有消费者协调在一起来消费订阅主题(subscribed topics)的所有分区(partition),消费者示意图:

单播与多播

单播:一条消息只能被某一个消费者消费的模式称为单播。要实现消息单播,只要让这些消费者属于同一个消费者组即可。
多播:一条消息能够被多个消费者消费的模式称为多播。之所以不称之为广播,是因为一条消息只能被Kafka同一个分组下某一个消费者消费,而不是所有消费者都能消费,所以从严格意义上来讲并不能算是广播模式,当然如果希望实现广播模式只要保证每个消费者均属于不同的消费者组。

实验

  1. 创建topic ,这里创建名为yangcan,副本因子和分区都为1的topic:
    bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic yangcan
  2. 创建两个消费者,开启两个shell终端界面,相当于两个消费者实例,消费yangcan这个topic的数据,同时指定消费组,组名为newGroup:
    bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic yangcan --group newGroup
  3. 向yangcan这个topic生产数据123456789
    在这里插入图片描述
    这时查看消费者,看到两个消费者实例中只有一个消费到了数据:在这里插入图片描述
    在这里插入图片描述
    示意图如下:
    在这里插入图片描述
    总结:当topic的分片数量小于处在同一消费者组内的消费者数量时,会使得消费者组的至少一个消费者消费不到数据,处于闲置。
  4. 这时,修改刚刚创建的topic的分区数量,讲分区数量变为2:
    bin/kafka-topics.sh --alter --zookeeper localhost:2181 --topic yangcan --partitions 2
    再次向topic生产数据:
    在这里插入图片描述
    查看两个消费者实例,可以看到两个消费者消费的数据:
    在这里插入图片描述
    在这里插入图片描述

总结:当topic的分片数量等于处在同一消费者组内的消费者数量时,每个消费者都可以消费到部分数据。

  1. 这时,我们关闭其中的一个消费者,重新创建一个消费者,但是指定消费者组名为newGroup1:
    在这里插入图片描述
  2. 再次向topic生产数据,可以看到两个消费者实例:
    在这里插入图片描述
    在这里插入图片描述
    可以看到两个消费者消费到同样的数据,结构示意图如下:
    在这里插入图片描述

总结:当多个消费者组共同消费一个topic时,消费者组之间互不影响,同一条数据会同时被各个消费者组消费。
9. 另外,假设topic有5个分区,其消费者组内只有1个消费者时,用这个消费者订阅这个topic,这时消费者会收到5个分区所有的消息,示意图如下:
在这里插入图片描述

消费者组其他操作

1.查看有哪些消费者组:
bin/kafka-consumer-groups.sh --list --bootstrap-server localhost:9092在这里插入图片描述
2.删除某个消费者组,例删除名为 tt 的消费者组:
bin/kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --delete --group ttt在这里插入图片描述
3.查看某个消费者组详情:
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group newGroup -describe
在这里插入图片描述
其中CURRENT-OFFSET表示当前消费偏移量,LOG-END-OFFSET表示末尾偏移量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值