30 | GroupMetadataManager:位移主题保存的只是位移吗?
胡夕
你好,我是胡夕。今天,我们学习位移主题管理的源码。
位移主题,即 __consumer_offsets,是 Kafka 的两大内部主题之一(另一个内部主题是管理 Kafka 事务的,名字是 __transaction_state,用于保存 Kafka 事务的状态信息)。
Kafka 创建位移主题的目的,是保存消费者组的注册消息和提交位移消息。前者保存能够标识消费者组的身份信息;后者保存消费者组消费的进度信息。在 Kafka 源码中,GroupMetadataManager 类定义了操作位移主题消息类型以及操作位移主题的方法。该主题下都有哪些消息类型,是我们今天学习的重点。
说到位移主题,你是否对它里面的消息内容感到很好奇呢?我见过很多人直接使用 kafka-console-consumer 命令消费该主题,想要知道里面保存的内容,可输出的结果却是一堆二进制乱码。其实,如果你不阅读今天的源码,是无法知晓如何通过命令行工具查询该主题消息的内容的。因为这些知识只包含在源码中,官方文档并没有涉及到。
好了,我不卖关子了。简单来说,你在运行 kafka-console-consumer 命令时,必须指定--formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter",才能查看提交的位移消息数据。类似地,你必须指定 GroupMetadataMessageFormatter,才能读取消费者组的注册消息数据。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Kafka源码解析:深入理解位移主题管理 本文深入解析了Kafka中位移主题的管理源码,重点介绍了位移主题的作用、消息类型以及消息的实现代码。首先介绍了位移主题的作用和消息类型,包括消费者组注册消息和消费者组的已提交位移消息。然后详细解释了位移主题消息的实现代码,包括GroupTopicPartition类和BaseKey接口的作用。文章强调了消息的Key和Value的定义方式,并介绍了具体消息类型的构造方式。此外,还介绍了Tombstone消息的作用,以及消费者组如何注册到Coordinator组件的原理。通过源码解析的方式,深入浅出地介绍了位移主题的管理及消息类型的实现,为读者提供了深入理解Kafka位移主题的技术视角。 文章还介绍了位移主题和消费者组Coordinator之间的关系,以及如何确定Coordinator。每个Broker在启动时都会启动Coordinator组件,但一个消费者组只能被一个Coordinator组件所管理。Kafka是如何确定哪台Broker上的Coordinator组件为消费者组服务的原理也得到了详细解释。最后,文章总结了位移主题的重要性,消息类型的定义以及Coordinator确认原则,为读者提供了全面的知识体系。 总的来说,本文通过深入解析Kafka源码,全面介绍了位移主题的管理及消息类型的实现,为读者提供了深入理解Kafka位移主题的技术视角。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kafka 核心源码解读》,新⼈⾸单¥59
《Kafka 核心源码解读》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- 胡夕置顶你好,我是胡夕。我来公布上节课的“课后讨论”题答案啦~ 上节课,我们重点学习了消费者组管理器GroupMetadataManager类。课后我请你思考在什么场景下,需要移除GroupMetadataManager中保存的消费者组记录?其实,这个场景有两个:1、Broker成为位移主题分区的Follower副本时;2、位移主题分区下线时。 okay,你同意这个说法吗?或者说你有其他的看法吗?我们可以一起讨论下。2020-07-0711
- 旭杰根据位移主题分区号是如何确定Leader副本的?它们之间的对应关系保存在哪个字段?
作者回复: “根据位移主题分区号是如何确定Leader副本的” --- 不需要确定。每个分区都有leader副本啊,如果你问的是Kafka如何知道每个分区的leader副本都在哪些broker上,那么这些数据保存在Controller元数据缓存和ZooKeeper之中
2020-09-28
收起评论