为什么从日志模块切入源码?
Kafka 源码体系庞大,涉及网络、协调、存储等多个维度,初学者若直接跳跃阅读极易迷失在细节中。本课程的设计逻辑遵循“自底向上”原则:优先夯实消息的物理存储基础,再逐步推导上层通信与集群协调机制。这种路径选择基于一个现实考量——大多数学习者在面对 Kafka 高性能特性时,往往知其然不知其所以然,核心缺口在于对日志写入、刷盘等底层机制缺乏直观认知。资料包中的课前必读部分针对性解决了两个常见痛点:一是 Scala 语法基础薄弱导致阅读代码时频繁卡顿,配套加餐专门补齐了模式匹配、隐式转换等核心语法,扫清语言障碍;二是本地工程环境搭建耗时过长,导读环节直接给出可运行的编译方案,让你将宝贵精力集中于理解代码逻辑而非配置环境。这种“缺什么补什么”的导向,有效避免了初学者在基础设施层面的无效时间损耗。
核心知识链条:从磁盘结构到分布式演进
课程主体聚焦日志模块,这是理解 Kafka 高性能的关键基石。你将深入剖析 LogSegment 的数据结构,厘清消息对象如何在磁盘上以追加写的方式组织;接着追踪日志加载的完整流程,搞懂 Broker 重启后如何利用内存映射快速恢复数据。这部分内容不仅对应理论认知,更直接关联实际工作中的性能调优场景——例如批量提交机制的实现原理、为何顺序写能带来极致性能等。期中测试并非简单的概念填空,而是要求结合源码片段分析异常场景,检验你是否真正看清了代码背后的执行路径,而非仅记住 API 用法。随着课程推进,特别放送板块引入了 Kafka 去除 ZooKeeper 依赖这一重大架构演进,帮助你建立对 KRaft 模式的认知,这是当前社区技术发展的主流方向,也是进阶必知的知识点。
实战产出与资料配合建议
期末测试通过一套综合性习题,覆盖生产消费全流程的关键源码点,旨在闭环检验学习成果。建议学习时严格配合测试题进行自测,重点反思那些“以为懂了但说不清细节”的模块,如消息持久化过程中的同步异步切换时机。学完本课程,你应能独立解释消息存储的底层实现,并在技术面试中针对 Kafka 核心机制给出有源码依据的深度回答,摆脱单纯背诵八股文的局面。日常学习中,可将特别放送中的面试题详解作为阶段性复习材料,对照源码验证自己的理解是否准确,形成“阅读源码—做题检验—复盘补充”的良性循环,确保知识内化而非浅层浏览。
课程目录
测试题 (2讲)
- 期中测试 _ 这些源码知识,你都掌握了吗?
- 期末测试 _ 一套习题,测试你的掌握程度
特别放送 (5讲)
- 特别放送(一)_ 经典的Kafka学习资料有哪些?
- 特别放送(三)_ 我是怎么度过日常一天的?
- 特别放送(二)_ 一篇文章带你了解参与开源社区的全部流程
- 特别放送(五) _ Kafka 社区的重磅功能:移除 ZooKeeper 依赖
- 特别放送(四)_ 20道经典的Kafka面试题详解
课前必学 (3讲)
- 开篇词 _ 阅读源码,逐渐成了职业进阶道路上的“必选项”
- 导读 _ 构建Kafka工程和源码阅读环境、Scala语言热身
- 重磅加餐 _ 带你快速入门Scala语言
日志模块 (5讲)
- 01 _ 日志段:保存消息文件的对象是怎么实现的?
- 02 _ 日志(上):日志究竟是如何加载日志段的?
- 03 _ 日志(下):彻底搞懂Log对象的常见操作
- 04 _ 索引(上):改进的二分查找算法在Kafka索引的应用
- 05 _ 索引(下):位移索引和时间戳索引的区别是什么?
请求处理模块 (5讲)
- 06 _ 请求通道:如何实现Kafka请求队列?
- 07 _ SocketServer(上):Kafka到底是怎么应用NIO实现网络通信的?
- 08 _ SocketServer(中):请求还要区分优先级?
- 09 _ SocketServer(下):请求处理全流程源码分析
- 10 _ KafkaApis:Kafka最重要的源码入口,没有之一
Controller模块 (5讲)
- 11 _ Controller元数据:Controller都保存有哪些东西?有几种状态?
- 12 _ ControllerChannelManager:Controller如何管理请求发送?
- 13 _ ControllerEventManager:变身单线程后的Controller如何处理事件?
- 14 _ Controller选举是怎么实现的?
- 15 _ 如何理解Controller在Kafka集群中的作用?
状态机模块 (3讲)
- 16 _ TopicDeletionManager: Topic是怎么被删除的?
- 17 _ ReplicaStateMachine:揭秘副本状态机实现原理
- 18 _ PartitionStateMachine:分区状态转换如何实现?
延迟操作模块 (2讲)
- 19 _ TimingWheel:探究Kafka定时器背后的高效时间轮算法
- 20 _ DelayedOperation:Broker是怎么延时处理请求的?
副本管理模块 (6讲)
- 21 _ AbstractFetcherThread:拉取消息分几步?
- 22 _ ReplicaFetcherThread:Follower如何拉取Leader消息?
- 23 _ ReplicaManager(上):必须要掌握的副本管理类定义和核心字段
- 24 _ ReplicaManager(中):副本管理器是如何读写副本的?
- 25 _ ReplicaManager(下):副本管理器是如何管理副本的?
- 26 _ MetadataCache:Broker是怎么异步更新元数据缓存的?
消费者组管理模块 (7讲)
- 27 _ 消费者组元数据(上):消费者组都有哪些元数据?
- 28 _ 消费者组元数据(下):Kafka如何管理这些元数据?
- 29 _ GroupMetadataManager:组元数据管理器是个什么东西?
- 30 _ GroupMetadataManager:位移主题保存的只是位移吗?
- 31 _ GroupMetadataManager:查询位移时,不用读取位移主题?
- 32 _ GroupCoordinator:在Rebalance中,Coordinator如何处理成员入组?
- 33 _ GroupCoordinator:在Rebalance中,如何进行组同步?
结束语 (1讲)
- 结束语 _ 源码学习,我们才刚上路呢





