1. 前言
机器版本:
其他环境:
- Zulu JDK1.8
- scala2.13.1
- gradle6.8
- zk3.6.3
- zookeeper3.6.3
在MacBook搭建kafka源码环境,并通过IDEA运行源码这一过程遇到了许多的问题,通过此片博文记录下来供同行们参考。
2. 正文
2.1 安装Zulu JDK1.8
官网链接:https://www.azul.com/downloads/?version=java-8-lts&os=macos&architecture=arm-64-bit&package=jdk
进入官网选择对应版本、对应机器后选择下载即可,此处本人下载的是.tar.gz版的。
解压好了zulu JDK1.8之后,然后配置JDK1.8环境依赖。
- 在根目录新建一个./bash_basicfile
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:%JAVA_HOME/lib/tools.jar
export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
export PATH=${PATH}:${JAVA_HOME}
- 将./bash_basicfile配置添加进~/.zshrc中
source /Users/apple/.bash_basicfile
然后保存~/.zshrc配置,然后命令source ~/.zshrc,让zshrc生效配置。
- 测试Java环境是否安装成功。
2.2 安装scala2.13.1
下载地址:https://downloads.lightbend.com/scala/2.13.1/scala-2.13.1.tgz。下载成功之后解压到本地磁盘目录即可。
同样在~/.bash_basicfile配置文件中添加scala的配置,如下:
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:%JAVA_HOME/lib/tools.jar
export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
export MAVEN_HOME=/Users/apple/Documents/dev_software/apache-maven-3.8.6
export SCALA_HOME=/Users/apple/Documents/dev_software/scala-2.13.1
export PATH=${PATH}:${SCALA_HOME}/bin:${JAVA_HOME}:${MAVEN_HOME}/bin**加粗样式**
然后通过命令source ~/.zshrc,让zshrc生效配置,随后检查下scala是否生效。
2.3 安装gradle6.8
kafka的依赖管理是通过gradle来实现的,而kafka2.8.0这个版本用gradle6.8正合适,所以接下来下载gradle6.8:https://gradle.org/next-steps/?version=6.8&format=bin,随后直接解压到本地磁盘目录,然后再~/.bash_basicfile中配置gradle。
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:%JAVA_HOME/lib/tools.jar
export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
export MAVEN_HOME=/Users/apple/Documents/dev_software/apache-maven-3.8.6
export GRADLE_HOME=/Users/apple/Documents/dev_software/gradle-6.8
export SCALA_HOME=/Users/apple/Documents/dev_software/scala-2.13.1
export PATH=${PATH}:${GRADLE_HOME}/bin:${SCALA_HOME}/bin:${JAVA_HOME}:${MAVEN_HOME}/bin
同样地通过命令source ~/.zshrc,让zshrc生效配置,随后检查下gradle是否生效。
2.4 安装zk3.6.3
安装地址:https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz,安装好zk3.6.3之后,解压到本地磁盘目录,然后再zk目录的conf目录下,拷贝zoo_sample.cfg文件并重命名为zoo.cfg。
2.5 下载kafka2.8.0源码
下载kafka2.8.0源码
接下来开始搭建kafka2.8.0源码环境。首先去kafka的github仓库中拷贝git链接,通过命令:
git clone https://github.com/apache/kafka.git
接着切换到2.8.0分支。
git checkout -b 2.8 origin/2.8
下载kafka相关依赖
通过在kafka源码目录下执行gradle idea命令来下载kafka相关依赖。
将kafka源码导入idea
将kafka源码导入idea之后结果如下图:
在运行源码之前还需要通过./gradlew jar来生成request和response类:
./gradlew jar
如果要对某一个具体的测试用例进行测试,比如LogTest类,可以通过下面的命令来测试:
./gradlew core:test --tests kafka.log.LogTest
2.6 源码调试
环境准备好了以后,可以开始着手准备源码调试。
首先得将kafka源码中conf目录下的log4j.proerties配置文件拷贝到src/main/scala目录下,如下图所示:
接着需要修改conf目录下server.properties配置,并修改其中的log.dir配置项。
启动zookeeper
进入zookeeper的bin目录,通过如下命令运行:
./zkServer.sh start
在IDEA中配置启动类
在IDEA中配置kafka.kafka这个入口类,配置如下图:
配置成功之后直接运行kafka.kafka类即可。
2.7 源码调试过程中遇到的问题
遇到问题1:
JDK安装成功,但是JAVA_HOME没有指定位置,用了MacOS自带的JDK6了,死活启动不了源码。同样的gradlew jar也报错。
检查指定的JAVA_HOME配置和IDEA中对应的配置保持一致。
遇到问题2:
ZooKeeper没启动,kafka.kafka源码一直启动不成功。
遇到问题3:
启动之后控制台日志一直报错,输出不了日志,通过翻墙查找到文章之后配置了gradle的配置解决。
https://medium.com/@chandreshpancholi007/how-to-setup-apache-kafka-source-code-on-intellij-b204966d7c2
分别在kafka/build.gradle以及kafka/gradle/dependencies.gradle中添加如下配置:
zui
最后还需要再IDEA启动类中配置vm.options,
-Dkafka.logs.dir=/Users/apple/Documents/git_code/kafka/kafka-logs -Dlog4j.configuration=file:config/log4j.properties
如下图:
遇到问题4:
错误: 找不到或无法加载主类 kafka.admin.TopicCommand,build core之后就行。
遇到问题5:
kafka.common.InconsistentClusterIdException: The Cluster ID iQOo-xz-TjKgi7L6M_TEoQ doesn’t match stored clusterId Some(3j3ydIppQqeEQx1Lh1Bf-g) in meta.properties. The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wrong.
将kafka-logs/meta.properties中的cluster.id替换成iQOo-xz-TjKgi7L6M_TEoQ,然后重新启动kafka服务即可。
2.8 调试结果
在控制台中查看到started,即表示kafka的服务端启动成功。