04 Kafka 源码之旅路线
上面聊完 Kafka 源码全景图后,接下来我们聊聊如何高效的阅读源码。由于 Kafka 源码大概有50多万行,如果一头扎进去的话,就会出现深陷源码之中而无法自拔。
我们此系列是按照「场景驱动」的方式带你一步步深度剖析, 即「从一条消息生产发送开始逐步探索 Kafka 的运行全流程」。
因此并不是上来就先从「服务端 Broker 源码」开始入手进行探索和剖析,我们会从一条消息发送出去, 首先是「生产端的源码运行的全流程」,最核心的是四大块:
1)NIO 网络通信模块:带你深度剖析下 Kafka 是如何基于Java NIO 实现一套工业生产级的网络底层通信模块的, 非常经典。
2)内存缓冲池设计:带你深度剖析下 Kafka 客户端是如何设计一套支撑百万并发的高吞吐量的缓冲机制的, 非常经典。
3)Sender发送线程:这是我们剖析的重点的重点,必须要搞清楚 Kafka 客户端是如何通过网络通信把一批批消息发送到 Kafka Broker 端上去的,这里涉及到很多网络通信的细节,一些参数设置,应对网络故障的时候是如何进行处理的?非常经典。
4)集群元数据拉取和更新机制:带你深度剖析下集群元数据拉取组件以及拉取时机;元数据如何在客户端缓存的;如何对Topic元数据支持细粒度的按需加载和同步等待。
此时消息已经被送达 Kafka Broker 端上去了, 这是我们学习的重点的重点。了解「服务端的源码运行的全流程」,最核心的是五大块:
1)集群架构:带你深度剖析下 Kafka Broker 的集群架构是如何实现的;各个 Broker启动起来后是如何组成一个集群的;集群的 Controller 是如何被选举出来的;故障恢复高可用架构方式是如何实现的等等。
2)服务端网络通信模块:带你深度剖析下 Kafka 服务端网络通信模块是如何实现的、了解 Reactor 设计模型以及 Kafka 基于 Reactor 实现的支撑超高并发的网络架构、深度剖析 Acceptor 线程、Processor 线程、RequestChannel、IO线程池等网络底层通信组件实现以及请求处理全流程源码。
3)分区与副本:带你深度剖析多副本冗余以及高可用架构如何实现;Leader 和 Follower 数据如何同步、副本如何传输、之间的HW和LEO如何变更;Leader 所在 Broker 故障宕机后, 如何保证系统高可用;副本管理器如何管理副本;Broker是如何异步更新元数据缓存的等等。
4)负载均衡与伸缩架构:带你深度剖析如何保证数据均衡的分布在集群的 Broker 机器上的;如何进行 Topic 的 Partition 的扩缩容以及 Broker 的扩缩容;。
5)日志存储架构:带你深度剖析 Kafka 是如何高效存储的;磁盘读写是如何实现的;日志的存储结构是怎样的;如何利用 OS Cache、零拷贝、稀疏索引、顺序写等优秀设计来支撑超高吞吐量的存储架构的。
待数据存储到 Broker 端上后,就可以启动消费者去消费数据了, 这时我们需要了解「消费端的源码运行的全流程」,最核心的六大块:
1)消费流程:带你深度剖析消费端是如何初始化的;如何与服务端进行通信的;Consumer 的 poll() 方法是如何进行数据消费的。
2)消费者组管理:带你深度剖析Consumer Group 概念、状态机流转;Consumer启动后是如何加入到 Group 的;Consumer Group 管理全流程;Consumer Group 元数据管理设计原理等等。
3)Coordinator 机制:带你深度剖析Consumer Coordinator 工作原理;Consumer Coordinator 是如何选举出来 Consumer Leader 的;Consumer Leader 如何制定分区分配方案;Consumer Coordinator 又是如何下发分区分配方案的; 以及 Consumer 是如何定时发送心跳给 Consumer Coordinator 的等等。
4)消息重平衡机制:带你深度剖析几种重平衡场景;以及重平衡源码流程分析。
5)__consumer_offsets:带你深度探秘其内幕以及存储结构。
6)订阅状态与Offset操作:带你深度剖析消费端订阅状态是如何保存和追踪Topic Partition 和 Offset 的对应关系;以及了解 Offset 如何获取以及提交方式等等。
至此一条消息从生产、存储、消费的整个流程就已经完毕了, 通过「掌握一种科学的阅读源码的方式--用高效的方式,读最核心的源码」让你真正掌握 Kafka 底层实现原理,在遇到线上故障时可以游刃有余,快速定位。
05 总结
这里,我们一起来总结一下这篇文章的重点。
1、从零带你搭建 Kafka 源码环境:「版本说明」、「环境准备」、「环境搭建」。
2、带你梳理了「Kafka 源码全景图」所包含的核心模块分布,也分别梳理了「服务端」、「生产端」、「消费端」 三端核心源码功能模块。
3、梳理完源码全景图后,又带你剖析我们「源码系列分享的整体思路」,从「场景驱动方式」入手,带你一步步深度剖析数据流转的整个过程的核心源码实现,从而让你深入理解 Kafka 底层原理,掌握源码的高效阅读方法,快速定位线上问题并制定调优方案。