前言
相对来说,kafka 编译比较简单,不过 kafka 是 scala 写的,所以在环境上要安装一下插件.
下载2.4.0源码包
链接:https://pan.baidu.com/s/15h2qn14HV8HCoEPldT77LA 密码:e59n
GIT LAB方式: git clone https://github.com/apache/kafka.git
安装依赖插件
Scala 2.12.10 +
JDK1.8 +
需要安装 gradlew
修改配置文件
打开项目文件夹,修改gradle.properties文件
编译
构建 jar包并运行
./gradlew jar
构建源码包
./gradlew srcJar
构建javadoc文档
./gradlew aggregatedJavadoc
清理并构建
./gradlew clean
构建项目
./gradlew idea
./gradlew eclipse
导入项目到 IDE 中
接着,你需要打开 IDEA,选择“打开工程”,然后再选择 kafka 目录即可。
在导入的时候选择gradle , 在输入 Gradle home 的时候路径为 : /usr/local/Cellar/gradle/6.0.1/libexec
如果找不到,可以全局搜索一下.
项目目录截图
重点关注的目录:
core :Broker 端工程,保存 Broker 代码。
clients :Client 端工程,保存所有 Client 代码以及所有代码都会用到的一些公共代码。
streams :Streams 端工程,保存 Kafka Streams 代码。
connect :Connect 端工程,保存 Kafka Connect 框架代码以及 File Connector 代码。
源码阅读顺序
log 包 : log 包中定义了 Broker 底层消息和索引保存机制以及物理格式。 Log、LogSegment 和 LogManager 这几个类,几乎定义了 Kafka 底层的消息存储机制。
controller 包 : controller 包实现的是 Kafka Controller 的所有功能,KafkaController.scala 文件,它封装了 Controller 的所有事件处理逻辑。如果你想弄明白 Controller 的工作原理,最好多读几遍。
coordinator 包下的 group 包代码 : 当前,coordinator 包有两个子 package: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 就好了,尤其是前者,它们是实现 Client 和 Broker 之间网络传输的重要机制。如果你完全搞懂了这个包下的 Java 代码,Kafka 的很多网络异常问题也就迎刃而解了。
org.apache.kafka.clients.producer 包。顾名思义,它是 Producer 的代码实现包,里面的 Java 类很多,你可以重点看看 KafkaProducer、Sender 和 RecordAccumulator 这几个类。
org.apache.kafka.clients.consumer 包。它是 Consumer 的代码实现包。同样地,重点阅读 KafkaConsumer、AbstractCoordinator 和 Fetcher 这几个 Java 文件。
参考链接
Kafka核心技术与实战 - 胡夕
https://kafka.apache.org/documentation.html#quickstart