一. 前言
编译kafka2.7.2版本, 目前最新版本为2.8.x , 但是因为2.8.x去掉了zk,稳定性不确定, 所以暂时以该版本进行研究.
二. 环境准备
2.1. 下载代码
GIT LAB方式: git clone https://github.com/apache/kafka.git -b 2.7
2.2. 安装环境
- Scala 2.11.8 +
- JDK1.8 +
- 需要安装 gradlew 我这要求是 6.6 版本
三 .安装
3.1. 修改配置文件
修改根目录下的 gradle.properties
配置
3.2. 代码指令
如果你是在 Mac 或 Linux 平台上搭建环境,那么直接运行下列命令构建即可
$ ./gradlew clean build -x test
- 异常 :
Failed to connect to raw.githubusercontent.com port 443: Connection refused
去找一下直接下载 Wrapper 所需的 Jar 包,手动把这个 Jar 文件拷贝到 kafka 路径下的 gradle/wrapper 子目录下,然后重新执行 gradlew build 命令去构建工程
网盘地址 : 链接: https://pan.baidu.com/s/106bb0CHMiBuc_hnzhCi_Cw 密码: 2bjh
- 其他指令
# 构建 jar包并运行
./gradlew jar
# 构建项目
./gradlew idea
./gradlew eclipse
# 构建源码包
./gradlew srcJar
# 构建javadoc文档
./gradlew aggregatedJavadoc
# 清理并构建
./gradlew clean
3.3. 导入idea
- 构建项目
# 构建项目
./gradlew idea
- 将项目导入idea
接着,你需要打开 IDEA,选择“打开工程”,然后再选择 kafka 目录即可。
在导入的时候选择gradle , 在输入 Gradle home 的时候路径为 : /opt/tools/gradle-6.6/bin
如果找不到,可以全局搜索一下.
四 .代码结构
4.1. 代码安装包结构
bin 目录:保存 Kafka 工具行脚本,我们熟知的 kafka-server-start 和 kafka-console-producer 等脚本都存放在这里。
clients 目录:保存 Kafka 客户端代码,比如生产者和消费者的代码都在该目录下。
config 目录:保存 Kafka 的配置文件,其中比较重要的配置文件是 server.properties。
connect 目录:保存 Connect 组件的源代码。 Kafka Connect 组件是用来实现 Kafka 与外部系统之间的实时数据传输的。
core 目录:保存 Broker 端代码。Kafka 服务器端代码全部保存在该目录下。
streams 目录:保存 Streams 组件的源代码。Kafka Streams 是实现 Kafka 实时流处理的组件。
4.2. 项目结构
controller 包:保存了 Kafka 控制器(Controller)代码,而控制器组件是 Kafka 的核心组件,后面我们会针对这个包的代码进行详细分析。
coordinator 包:保存了消费者端的 GroupCoordinator 代码和用于事务的 TransactionCoordinator 代码。对 coordinator 包进行分析,特别是对消费者端的 GroupCoordinator 代码进行分析,是 Broker 端协调者组件设计原理的关键。
log 包:保存了 Kafka 最核心的日志结构代码,包括日志、日志段、索引文件等, 另外,该包下还封装了 Log Compaction 的实现机制,是非常重要的源码包。
network 包:封装了 Kafka 服务器端网络层的代码,特别是 SocketServer.scala 这个文件,是 Kafka 实现 Reactor 模式的具体操作类,非常值得一读。
server 包:顾名思义,它是 Kafka 的服务器端主代码,里面的类非常多,很多关键的 Kafka 组件都存放在这里,比如状态机、Purgatory 延时机制等。