如何搭建 Kafka 开发环境
- 安装 Java 和 Gradle
- 必须要安装好 Java 和 Gradle,同时在 IDEA 中安装 Scala 插件。最好把 Java 和 Gradle 环境加入到环境变量中。
- 下载 Kafka 的源码
1
2> cd Projects
> git clone https://github.com/apache/kafka.git - 下载 Gradle 的 Wrapper 程序套件
1 | > gradle |
- 将 Kafka 源码编译打包成 Jar 文件
1
> ./gradlew clean releaseTarGz
- 在 core 的 build/distributions 下面找到生成的 tgz 包:kafka_2.12-2.4.0-SNAPSHOT。
- 解压之后,这就是一个可以正常启动运行的 Kafka 环境了。
- 把 Kafka 源码工程导入到 IDEA 中
1
> ./gradlew idea #如果你用的是Eclipse,执行./gradlew eclipse即可
- 打开 IDEA,选择“打开工程”,然后再选择 kafka 目录即可。
Kafka源码结构
几个特殊目录
- core:Broker 端工程,保存 Broker 代码。
- clients:Client 端工程,保存所有 Client 代码以及所有代码都会用到的一些公共代码。
- streams:Streams 端工程,保存 Kafka Streams 代码。
- connect:Connect 端工程,保存 Kafka Connect 框架代码以及 File Connector 代码。
阅读源码技巧
- 先从 core 包读起,也就是先从 Broker 端的代码着手。
- log 包。log 包中定义了 Broker 底层消息和索引保存机制以及物理格式,非常值得一读。特别是 Log、LogSegment 和 LogManager 这几个类,几乎定义了 Kafka 底层的消息存储机制,一定要重点关注。
- controller 包。controller 包实现的是 Kafka Controller 的所有功能,特别是里面的 KafkaController.scala 文件,它封装了 Controller 的所有事件处理逻辑。如果你想弄明白 Controller 的工作原理,最好多读几遍这个将近 2000 行的大文件。
- coordinator 包下的 group 包代码。当前,coordinator 包有两个子 package:group 和 transaction。前者封装的是 Consumer Group 所用的 Coordinator;后者封装的是支持 Kafka 事务的 Transaction Coordinator。我个人觉得你最好把 group 包下的代码通读一遍,了解下 Broker 端是如何管理 Consumer Group 的。这里比较重要的是 GroupMetadataManager 和 GroupCoordinator 类,它们定义了 Consumer Group 的元数据信息以及管理这些元数据的状态机机制。
- network 包代码以及 server 包下的部分代码。如果你还有余力的话,可以再读一下这些代码。前者的 SocketServer 实现了 Broker 接收外部请求的完整网络流程。Kafka 用的是 Reactor 模式。想搞清楚 Reactor 模式是怎么在 Kafka“落地”的,就把这个类搞明白。
扫描二维码,分享此文章