消费者组 - Consumer Group
什么是消费组 - Consumer Group?
消费者组是Kafka 提供的可扩展且具有容错性的消费者机制
消费组的三大特性
- 消费组有一个或多个消费者,消费者可以是一个服务、一个进程、一个线程
- 消费组具有一个唯一标识字符串,
group.id
- 消费组订阅的主题每个分区只能分配给一个消费者
消费组的存在就是说: 以消费组的名义,去消费主题的消息
,当然最终消费组里的消费者有多少取决于主题有多少个分区
记录偏移量,多于分区个数的消费者会分配不到分区而造成空闲;同时也是以消费组的名义,在Kafka里记录消费消息的偏移量
既然讲到偏移量,那我们来看看偏移量(位移)是怎么管理的?
位移管理
消费者提交偏移量的两种方式
- 自动提交,Kafka默认自动提交,可以通过参数调整
enable.auto.commit = false
即关闭自动提交 - 手动提交
Kafka 是如何记录偏移量信息的呢?
消费者是在消费消息的过程中定期提交偏移量的
Kafka会将group消费情况保存起来,做成一个offset map,如下图:
key: groupId + Topic + partition
value: offset
绿色代表已经消费过了,红色代表未被消费消息,箭头代表偏移量,下一次要消费的消息
在文件里实际存储形式如下:
在这里插入图片描述
以消费组的名义记录偏移量信息
这里我们发现记录偏移量时没有消费者什么事,这也是Kafka设计的精妙之处,
任意消费者分配了分区后只要以消费组的名义都能获取分区数据,
当消费者伸缩重新分配分区后,依然可以继续消费,
因为偏移量没有跟消费者绑定,是跟消费组绑定的,这也是一种容错机制
类似于Java里面多态的一种思想