™技术博客

kafka | 搭建源码环境

2021年5月26日

如何搭建 Kafka 开发环境

  1. 安装 Java 和 Gradle
  • 必须要安装好 Java 和 Gradle,同时在 IDEA 中安装 Scala 插件。最好把 Java 和 Gradle 环境加入到环境变量中。
  1. 下载 Kafka 的源码
    1
    2
    > cd Projects
    > git clone https://github.com/apache/kafka.git
  2. 下载 Gradle 的 Wrapper 程序套件
1
2
> gradle
> Configure project :
  1. 将 Kafka 源码编译打包成 Jar 文件
    1
    > ./gradlew clean releaseTarGz
  • 在 core 的 build/distributions 下面找到生成的 tgz 包:kafka_2.12-2.4.0-SNAPSHOT。
  • 解压之后,这就是一个可以正常启动运行的 Kafka 环境了。
  1. 把 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“落地”的,就把这个类搞明白。
Tags: kafka

扫描二维码,分享此文章