当前位置: 首页 > news >正文

Kafka 入门到起飞系列 - 消费者组管理、位移管理

消费者组 - Consumer Group

上文我们已经讲过消费者组了,我们知道消费组的存在可以保证一个主题下一个分区的消息只会被组内一个消费者消费,从而避免了消息的重复消费

什么是消费组 - Consumer Group?

消费者组是Kafka 提供的可扩展且具有容错性的消费者机制

消费组的三大特性

  1. 消费组有一个或多个消费者,消费者可以是一个服务、一个进程、一个线程
  2. 消费组具有一个唯一标识字符串,group.id
  3. 消费组订阅的主题每个分区只能分配给一个消费者

怎么理解呢,其实就是让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里面多态的一种思想
http://www.lryc.cn/news/97784.html

相关文章:

  • SpringBoot——数据层三组件之间的关系
  • LeetCode647.Palindromic-Substrings<回文子串>
  • React的hooks---useContext
  • 【Terraform学习】TerraformCloud入门介绍(快速入门)
  • linux实现运行java分包部署
  • 数据安全之全景图系列——数据分类分级落地实践
  • C++实现MySQL数据库连接池
  • day4 驱动开发 c语言学习
  • history命令:显示命令执行时间
  • Django接口返回JSON格式数据报文
  • OBS 迁移--华为云
  • 【Docker consul的容器服务更新与发现】
  • MFC第二十天 数值型关联变量 和单选按钮与复选框的开发应用
  • 服务器 Docker Alist挂载到本地磁盘(Mac版)夸克网盘
  • EMP-SSL: TOWARDS SELF-SUPERVISED LEARNING IN ONETRAINING EPOCH
  • 注解和反射01--什么是注解
  • 虚拟机 RHEL8 安装 MySQL 8.0.34
  • kafka 总结宝典
  • 跨平台力量:探索C++Qt框架的未来前景
  • 基于长短期神经网络LSTM的位移监测,基于长短期神经网络的位移预测,LSTM的详细原理
  • ChatGPT漫谈(二)
  • 【LangChain】检索器之MultiQueryRetriever
  • 教师ChatGPT的23种用法
  • 【libevent】http客户端1:转存http下载的数据
  • Pytorch学习笔记 | 数据类型 | mnist数据集
  • Linux虚拟机(lvm)报Unmount and run xfs_repair
  • 【ESP32】Espressif-IDE及ESP-IDF安装
  • 基于vue3实现画布操作的撤销与重做
  • php 抽象工厂模式
  • WPF实战学习笔记13-创建注册登录接口