如何用文档创建一个网站,商城网站 模板,网店装修素材网站,wordpress posted on消费者组 - Consumer Group 上文我们已经讲过消费者组了#xff0c;我们知道消费组的存在可以保证一个主题下一个分区的消息只会被组内一个消费者消费#xff0c;从而避免了消息的重复消费 什么是消费组 - Consumer Group#xff1f;
消费者组是Kafka 提供的可扩展且具有容…消费者组 - Consumer Group 上文我们已经讲过消费者组了我们知道消费组的存在可以保证一个主题下一个分区的消息只会被组内一个消费者消费从而避免了消息的重复消费 什么是消费组 - Consumer Group
消费者组是Kafka 提供的可扩展且具有容错性的消费者机制
消费组的三大特性
消费组有一个或多个消费者消费者可以是一个服务、一个进程、一个线程消费组具有一个唯一标识字符串group.id消费组订阅的主题每个分区只能分配给一个消费者 怎么理解呢其实就是让Kafka的客户端此时指消费者具有弹性弹性伸缩可扩展具有容错性 比如我们有一个主题主题有5个分区我们有一个消费组组内有3个消费者组成消费者集群如下图 比如此时消费者消费能力不够了我们可以在线添加一个消费者到消费组提升消费能力当然不管增加消费者还是消费者下线都需要重新分配分区与消费者的关系Rebalance如下图 消费组的存在就是说 以消费组的名义去消费主题的消息当然最终消费组里的消费者有多少取决于主题有多少个分区 记录偏移量多于分区个数的消费者会分配不到分区而造成空闲同时也是以消费组的名义在Kafka里记录消费消息的偏移量 既然讲到偏移量那我们来看看偏移量位移是怎么管理的
位移管理 首先位移就是偏移量offset,就是消息的编号Kafka内置了一个主题_consumer_offset来记录分区消费情况该分区消费到第几号消息了那么为什么说偏移量是由消费者自己管理的呢因为是消费者自己决定消费分区里第几号消息然后把这个偏移量信息定期提交到Kafka去Kafka再将偏移量信息记录到_consumer_offset主题去所以其实消费者本身也是一个生产者 消费者提交偏移量的两种方式
自动提交Kafka默认自动提交可以通过参数调整 enable.auto.commit false即关闭自动提交手动提交
Kafka 是如何记录偏移量信息的呢
消费者是在消费消息的过程中定期提交偏移量的 Kafka会将group消费情况保存起来做成一个offset map,如下图
key: groupId Topic partition
value: offset绿色代表已经消费过了红色代表未被消费消息箭头代表偏移量下一次要消费的消息 在文件里实际存储形式如下 在这里插入图片描述
以消费组的名义记录偏移量信息
这里我们发现记录偏移量时没有消费者什么事这也是Kafka设计的精妙之处
任意消费者分配了分区后只要以消费组的名义都能获取分区数据
当消费者伸缩重新分配分区后依然可以继续消费
因为偏移量没有跟消费者绑定是跟消费组绑定的这也是一种容错机制类似于Java里面多态的一种思想