Kafka之源码阅读环境的构建
走近Kafka之源码阅读环境的构建
构建准备:
- [Ubuntu 18 安装] Linux衍生系统
- [Java 1.8+ 版本安装] Java环境
-
[Gradle 5.6.4 版本安装]
- Kafka源代码编译构建工具
- [Git安装] 代码管理
- [zookeeper 安装] kafka集群构建/调试使用
- [Scala 2.12.10 安装] 阅读源代码和远程调试使用
-
[IntelliJ Idea安装] 阅读源代码和远程调试使用
- 安装scala和lombok插件
- 由于某些网络运营商屏蔽了IntelliJ 系列的dns映射,所以无法下载插件的小伙伴可以到[网盘下载],提取码: 5e52.解压后,将两个文件夹放到对应的InteliJ的插件目录下,比如:/home/${user}/.IdeaIC2019.3/config/plugins目录下,重新启动IntelliJ即可。
开始构建
-
创建工作目录:
mkdir kafka_code_location
,
创建一个目录作为Kafka源代码下载目录,比如kafka_code_location
-
将 [kafka] 项目仓库fork到自己的github
-
切换到工作目录:
cd kafka_code_location
,
从自己的github中pull kafka的源代码,git clone git@github.com:${username}/kafka.git
-
分支准备:进入kafka代码目录,
cd kafka
;
切换到kafka 2.4分支,git checkout 2.4
;
从此分支构建自己的分支,git checkout -b your_branch_base_2.4
-
主要编译命令说明
-
./gradlew jar
构建 jar包并运行 -
./gradlew srcJar
构建源码包 -
./gradlew aggregatedJavadoc
构建javadoc文档 -
./gradlew clean
清理并构建 -
./gradlew idea
构建项目 -
./gradlew eclipse
构建项目
-
-
执行 ./gradlew idea
-
导入项目到 IntelliJ 中
打开 IntelliJ,选择“打开工程”,选择 kafka 目录即可。
核心目录:
-
core
:Broker
工程代码。 -
clients
:Client
工程代码以及一些公共代码。 -
streams
:Streams
工程代码。 -
connect
:Connect
工程框架代码以及FileConnector代码。
推荐的代码模块学习顺序
-
log
其中定义了Broker
底层消息和索引保存机制以及物理格式。-
Log
、LogSegment
和LogManager
等几个类,主要定义了Kafka底层的消息存储机制。
-
-
controller
主要实现的是Kafka Controller
的所有功能,KafkaController.scala
文件,它封装了Controller
的所有事件处理逻辑 -
coordinator
中group
包代码,coordinator
包有group
和transaction
。- 前者封装的是
Consumer Group
所用的Coordinator
,后者封装的是支持Kafka
事务的Transaction Coordinator
。
了解Broker
是如何管理Consumer Group
的。GroupMetadataManager
和GroupCoordinator
类,它们定义了Consumer Group
的元数据信息以及管理这些元数据的状态机机制。
- 前者封装的是
-
network
代码和server包下的部分代码。 -
Broker
主要看KafkaApis.scala
。处理请求的主要功能封装 -
clients
:略 -
org.apache.kafka.common.record
这个包下面主要是Kafka
消息实体类,比如用于在内存中传输的MemoryRecords
类以及用于在磁盘上保存的FileRecords
类。 -
org.apache.kafka.common.network
重点关注Selector、KafkaChannel
,建议更加注重Selector
,它们是实现Client 和 Broker
之间网络传输的重要机制。很多网络异常问题就是这个包中抛出的! -
org.apache.kafka.clients.producer
它是 Producer 的代码实现包,可重点选择几个类学习即可,比如KafkaProducer、Sender 或者 RecordAccumulator
等。 -
org.apache.kafka.clients.consumer
它是 Consumer 的代码实现包。同org.apache.kafka.clients.producer
,重点阅读KafkaConsumer、AbstractCoordinator 和 Fetcher
等类即可。
后续
- 后续将会使用这个环境对kafka源代码进行学习分享