- 内容:这近一年的时间,对 Kafka 的源码看了很多,但是并没有系统地去总结,希望自己在未来的半年到一年里能完成对 Kafka 源码分析的文章;
- 指定一个小目标:每两周输出一篇 Kafka 分析的相关文章。(2017.6.11立)
- 每篇文章都要用一张图表现出来(从第三篇开始,2017.7.17)。
Kafka Producer 端系列的源码分析,目前能想到的几个主题:
- Producer 的发送模型(Kafka 源码分析之 Producer 发送模型(一),2017.6.25);
- Producer metadata 更新机制Kafka 源码分析之 Producer Metadata 更新机制(二)(2017.7.8);
- Producer 之Server 端对 create topic 请求的处理;Kafka 源码分析之 topic 创建过程(三)(计划2017.7.16,实际完成时间2017.7.21);
- Producer 之Java NIO 总结,Kafka 源码分析之 Producer NIO 网络模型(四)(计划2017.8.6,实际完成时间2017.8.23);
- Producer 其他部分小节(RecordAccumulator 详细实现、有序性保证等)Kafka 源码解析之 Producer 单 Partition 顺序性实现及配置说明(五)(计划完成时间2017.8.31,完成时间2017.9.10)。
Kafka Consumer 端系列源码分析,分别以下几个部分来讲述(大概会分为5个):
- Consumer 消费模型的第一步——加入一个 group,Kafka 源码解析之 Consumer 如何加入一个 Group(六)(计划 2017.9.17,实际2017.10.22);
- Consumer poll 模型(Kafka 源码解析之 Consumer Poll 模型(七))(计划2017.11.4,实际完成 2017.11.11);
- Consumer 两种消费订阅及两中 commit (同步、异步)机制(Kafka 源码解析之 Consumer 两种订阅模式(八))(Kafka 源码解析之 Consumer 两种 commit 机制和 partition 分配机制(九))(计划 2017.11.11,实际完成 2017.11.19);
- ConsumerCoordinator 与 GroupCoordinator 机制(计划2017-11-24);
- Consumer 最后总结,Fetcher 及一些参数配置(计划2017-11-30);
Kafka Server 端的源码解析,主要分为以下三块来讲解(大概会有8篇左右的文章):
GroupCoordinator
- Kafka 源码解析之 GroupCoordinator 详解(十),完成时间:2018-01-28.
存储层
- LogManager 的设计与实现(Kafka 源码解析之日志管理(十一))(计划完成时间:2018-03-11,实际完成时间是2018-03-12);
- Log 的设计与实现,主要是 Log 读写、分段(Kafka 源码解析之 Server 端如何处理 Produce 请求(十二),实际完成时间:2018-03-18);(计划完成时间:2018-03-18);
- Kafka Server 对 Fetch 请求的处理与 Log 的读实现(Kafka 源码解析之 Server 端如何处理 Fetch 请求(十三))(计划完成时间:2018-03-25,实际完成时间:2018-04-16);
- Kafka 副本同步机制的实现Kafka 源码解析之副本同步机制实现(十四)(计划完成时间:2018-04-30,实际完成时间:2018-04-29);
- ReplicaManager 的设计实现Kafka 源码解析之 ReplicaManager 详解(十五)(计划完成时间:2018-05-01,实际完成时间:2018-05-01);
Controller
这部分计划在 6.11 前讲述完。
- Controller 之 启动选举流程,见 Kafka 源码解析之 Controller 选举及服务启动流程(十六),完成时间:2018-06-15;
- Controller 之 PartitionStateMachine 和 ReplicaStateMachine,见 Kafka 源码解析之副本状态机与分区状态机(十七),完成时间:2018-06-16;
- Controller Partition reassignment,Kafka 源码解析之 Partition 副本迁移实现(十八),完成时间:2018-06-16;
- Topic /新建/扩容/删除的处理,Kafka 源码解析之 Topic 的新建/扩容/删除(二十),完成时间:2018-06-18;
- Controller 处理 broker 的上下线,Kafka 源码解析之 Broker 上线下线(十九),完成时间:2018-06-17;
- Controller 请求发送模型,Kafka 源码解析之 Controller 发送模型(二十一),完成时间:2018-06-23;
- LeaderAndIsr 请求的处理过程,Kafka 源码解析之 LeaderAndIsr 请求的处理(二十二),完成时间:2018-06-25;
Kafka Server 端
- Broker 端 SocketServre M+N+1 处理模型,Kafka 源码解析之 Server 1+N+M 网络处理模型(二十三),完成时间:2018-06-27。
最后总述。
其它内容(包括后来的 new feature):
- producer 端如何实现不重(1.0.0代码)KIP-98 - Exactly Once Delivery and Transactional Messaging;
- kafka 能否做到完全不丢(腾讯开源的一个 mq:微信开源PhxQueue:高可用、高可靠、高性能的分布式队列),或者有没有什么情况下kafka 即使做了不丢的设置,还是会有丢失的风险?
- Kafka 限流是如何做的?
马上就到2018.6.11了,这个小项目也算是立项一年了,庆幸的是自己能够坚持下来了,遗憾的时候没有在一年的时间内完成,后续其他的源码阅读要督促自己,保证总体按照计划去进行(立于2018.6.10)。
截至昨天晚上(2018-06-27),Kafka 源码解析系列23篇终于完成,主要是 client 与 core 部分的代码。