准备环境
- Java
安装Java环境,MacOS和Linux上使用可以解压官网的压缩包之后在
/etc/profile
中配置,在Window上打开计算机属性选择高级,环境变量,然后把解压后的Java的bin目录追加配置在path的值后。
- Zookeeper
需要先安装Java环境,从Zookeeper官网下载压缩包,解压找到bin目录和conf目录,MacOS和Linux上在bin目录调用
sh bin/zkEnv.sh & sh bin/zkServer.sh start
启动,在Window上调用zkEnv.cmd zkServer.cmd
- Gradle
Gradle 环境安装MacOS和Linux上也可以和Java设置一样手动处理,也可以使用brew安装,Window上和上述Java的安装一致
- Scala
和Gradle安装方式一样。
- Git
需要安装git环境,从github上拉去Kafka的源代码,MacOS和Linux,可以手动压缩包安装,也可以brew,yml,rpm安装。记得配置ssh Key
- IDE
选择一款适合你的开发工具,Eclipse或者IntelliJ IDEA。
先从Kafak的github的地址拉去代码,我pool的是我fork的:https://github.com/MoodFly/kafka.git,
拉去代码之后你需要先从主干切换到你需要学习的版本,我这里切换的是0.11.0版本,之后你可以把Kafka项目导入IDE了,差点忘了,你还需要在IDE上增加Scala的语言插件,因为Kafak的Broker代码是Scala书写的。编译安装之后,会遇到一些问题。我在这里罗列一下,解决方案我放在下面。问题如下:
- Gradle bulid会失败,nodeName not found
因为国内访问jcenter地址比较闹心,你可以选择使用阿里云的maven镜像
- apply plugin: "org.scoverage"报错 找不到Jar
需要更换以来的jar,参照 KAFKA-7706 的 patch
修改编译脚本
- 添加maven地址,修改jcenter的地址协议为http
repositories {
maven { url "http://maven.aliyun.com/nexus/content/groups/public/"}
jcenter{ url "http://jcenter.bintray.com/"}
}
- 修改gradle-scoverage的版本
> 升级依赖包的版本
dependencies {
// For Apache Rat plugin to ignore non-Git files
classpath "org.ajoberstar:grgit:1.9.2"
classpath 'com.github.ben-manes:gradle-versions-plugin:0.14.0'
classpath 'org.scoverage:gradle-scoverage:2.5.0'
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
}
#### 日志打印
解决上述的编译问题之后 ,你需要先去看下当前的Kafka的gradle目录内部是否有wrapper目录,如果没有的话,可以先执行`gradle wrapper & gradle idea`,也可以`gradlew idea`,等待编译完成之后,这样你就可以在idea中启动Kafka了.启动需要在main目录之下增加resources目录,把config目录下的log4j.properties文件放进去。
#### 指定Kafka配置文件
启动类选定Kafka.scala,然后再指定Kafka的配置文件是config目录的下server.properties,修改zk的连接信息,然后启动主程序。看到如下日志,那么就恭喜你了,kafka编译安装成功。
[2020-01-20 14:27:43,734] INFO Creating /brokers/ids/0 (is it secure? false) (kafka.utils.ZKCheckedEphemeral)
[2020-01-20 14:27:43,738] INFO Result of znode creation is: OK (kafka.utils.ZKCheckedEphemeral)
[2020-01-20 14:27:43,739] INFO Registered broker 0 at path /brokers/ids/0 with addresses: EndPoint(172.20.10.6,9092,ListenerName(PLAINTEXT),PLAINTEXT) (kafka.utils.ZkUtils)
[2020-01-20 14:27:43,768] INFO Kafka version : 0.11.0.3-SNAPSHOT (org.apache.kafka.common.utils.AppInfoParser)
[2020-01-20 14:27:43,768] INFO Kafka commitId : 7b9c4b61725ae1fd (org.apache.kafka.common.utils.AppInfoParser)
[2020-01-20 14:27:43,785] INFO [Kafka Server 0], started (kafka.server.KafkaServer)