【kafka实践】09|消费者位移

位移主题

前面的章节中已经多次提到消费位移了,本节内容就要深入了解下消费位移topic:__consumer_offsets(前面是两个下划线),我们也可以称其为"位移主题"

上一节有提到老版本 Consumer 的位移管理是通过ZooKeeper实现的。当 Consumer 重启时,从 ZooKeeper 中读取位移数据,继续上一次的消费。这使得 Kafka Broker 不需要保存位移数据,减少了 Broker 端需要持有的状态空间,有利于实现高伸缩性。

但ZooKeeper并不适用于这种高频写操作,因此Kafka在更新了几个版本之后,最终抛弃了位移管理机制,同时引入了**__consumer_offsets**这个内部主题。

新的位移管理机制也很简单,就是将 Consumer 的位移数据作为一条条普通的 Kafka 消息,提交到 __consumer_offsets 中。__consumer_offsets 的主要作用是保存 Kafka 消费者的位移信息。它要求这个提交过程不仅要实现高持久性,还要支持高频的写操作。Kafka本身的设计就满足这两个条件,因此使用 __consumer_offsets 主题来保存位移就水到渠成了。

位移主题并不神秘,你可以手动地创建它、修改它,甚至删除它。不过大部分情况下,不需要管理它,既然是内部主体,把它交给 Kafka就行了。

消息格式

虽然我们可以手动修改位移主题,但它的消息格式却是Kafka自己定义的,不能随便修改,也就是说不能随意地向这个主题写消息,一旦你写入的消息不满足 Kafka 规定的格式,那么 Kafka 内部无法成功解析,就会造成 Broker 的崩溃。

关于**__consumer_offsets的** 消息格式,可以简单地理解为是一个 KV 对。Key 和 Value 分别表示消息的键值和消息体,既然是存储位移那value一定和就是位移信息,那key呢,大家可以先思考一下。**位移主题的 Key 中应该保存 3 部分内容:groupId + topic信息 + partition信息,**这样就能区分具体consumer的消费情况了!

当然这只是大体的消息格式,实际上的设计比这个复杂的多,我们有个大体的概念即可,又深入了解的朋友欢迎评论区交流。

创建时机

通常当 Kafka 集群中的第一个 Consumer 程序启动时,会自动创建位移主题。位移主题就是普通的 Kafka 主题,如果是Kafka自动创建的,分区数是怎么设置的呢?这取决于Broker端参数 offsets.topic.num.partitions的取值,默认值是 50,同理副本数通过offsets.topic.replication.factor配置,它的默认值是 3。所以 Kafka 会自动创建一个 50 分区、副本为 3的位移主题。

删除过期位移

简单提一下过期位移的删除,Kafka 使用 Compact 策略来删除位移主题中的过期消息,避免该主题数据堆积过多。同时Kafka 提供了专门的后台线程(Log Cleaner)定期地巡检待 Compact 的主题,看是否存在满足条件的可删除数据。如果生产环境中出现过位移主题用过多磁盘空间的问题,可以检查下是否是该现场挂掉。

相关推荐
小北方城市网2 小时前
RabbitMQ 生产级实战:可靠性投递、高并发优化与问题排查
开发语言·分布式·python·缓存·性能优化·rabbitmq·ruby
乾元2 小时前
拒绝服务的进化:AI 调度下的分布式协同攻击策略
人工智能·分布式
编程彩机2 小时前
互联网大厂Java面试:从分布式事务到微服务优化的技术场景解读
java·spring boot·redis·微服务·面试·kafka·分布式事务
听麟3 小时前
HarmonyOS 6.0+ PC端多设备文件拖拽协同开发实战:手眼同行增强与分布式软总线深度应用
分布式·华为·harmonyos
indexsunny3 小时前
互联网大厂Java面试实战:从Spring Boot到Kafka的技术与业务场景解析
java·spring boot·redis·面试·kafka·技术栈·microservices
前端世界4 小时前
鸿蒙分布式网络性能优化实战:从通信建连到多设备协同
网络·分布式·harmonyos
雪碧聊技术4 小时前
什么是Zookeeper?
分布式·zookeeper
李白你好4 小时前
基于腾讯云函数 (SCF) 的分布式 IP 代理池.
分布式·tcp/ip·腾讯云
鱼跃鹰飞4 小时前
大厂面试真题-说说Kafka消息的不重复和不丢失
java·分布式·kafka
冷崖4 小时前
消息队列-kafka的安装(二)
分布式·kafka