【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 的主题,看是否存在满足条件的可删除数据。如果生产环境中出现过位移主题用过多磁盘空间的问题,可以检查下是否是该现场挂掉。

相关推荐
天远Date Lab2 小时前
零信任架构实战:基于天远天远风控经营异常预警构建分布式企业合规监控网关
人工智能·分布式·架构
StarRocks_labs2 小时前
StarRocks x Fluss x Paimon 湖流一体方案:构建秒级响应、湖流一体的实时数据引擎
starrocks·kafka·lambda·查询·paimon·fluss·湖流一体
小白酷爱学习19 小时前
鸿蒙OS的开发语言与工具链:如何驾驭全新开发生态!
分布式·华为·架构·harmonyos
数智启示录21 小时前
实时数据湖 flink CDC + Kafka +Doris 【企业级实战】Checkpoint、Offset、事务与幂等如何闭环 06
大数据·flink·kafka
BD_Marathon1 天前
Hadoop组成
大数据·hadoop·分布式
数智启示录1 天前
实时数据湖 Flink CDC + Kafka +Doris 【企业级实战】之Kafka 事件缓冲层 【附核心源码】 04
java·大数据·flink·kafka·数据库开发
数智启示录1 天前
实时数据湖 flink CDC + Kafka +Doris 【企业级实战】性能调优与生产运维闭环 09
运维·flink·kafka
树下水月1 天前
python3 使用canal监听后,kafka数据同步从mysql到clickhouse数据库 完整复盘
数据库·mysql·kafka
Databuff1 天前
使用Pinpoint作分布式链路跟踪系统
运维·分布式·运维开发·开源软件
传感器与混合集成电路1 天前
分布式光纤测温DTS系统:ZDTS-P2000与X1000参数对比及找漏监测应用
分布式·数据分析