1:kafka源码阅读环境搭建
1:提前安装scala,JDK,gradle
查看是否安装,安装的版本尽量和源码中要求的版本保持一致,详见README.md和gradle.properties文件中说明
gradle -v
java -v
scala -v
gradle下载地址:https://gradle.org/releases/ 下载解压配置环境变量即可。
scala下载地址:https://www.scala-lang.org/download/2.11.12.html,下载.msi安装一直next完成即可,不用配环境变量。
2:idea配置scala(安装scala插件)
3:idea配置已经安装的gradle
4:kafka源码配置步骤如下。
- 1:kafka源码下载:http://archive.apache.org/dist/kafka/ 选择带src.tar.gz的包,本次选择版本1.1.1-src.tar.gz
- 2:解压包
- 3:在cmd中切换到解压路径下,执行gradle idea 可以看到最后成功,一般根据网速5分钟左右。
- 4:打开idea导入源码
- 5:修改源码中的配置文件
修改gradle.properties配置文件中的scalaVersion与安装的一致。如果更改了scalaVersion,需要重新执行gradle idea命令来重新构建 - 6:将config目录下的log4j.properties文件拷贝到core/src/main/scala目录下,这样可以让Kafka在运行时能够输出日志信息
- 7:配置config/server.properties文件
配置影响kafka运行的相关参数,windows运行源码需要配置log日志输出位置为windows文件地址
zookeeper.connect必须配zk的连接地址,可以是虚拟机等等,不配置无法启动汇报finished with non-zero exit value 1或者空指针等异常导致启动失败
# 是否允许topic被删除,设置为true则topic可以被删除,
# 开启这个功能方便Kafka在运行一段时间之后,能够删除一些不需要的临时topic
delete.topic.enable=true
# 禁用自动创建topic的功能
auto.create.topics.enable=false
# 存储log文件的目录,默认值为/tmp/kafka-logs
# 示例是在Windows环境下运行,所以需要修改这个配置,注意这里的双反斜杠。
log.dir=D:\\kafka\\tmp\\kafka-logs
# 配置kafka依赖的zookeeper路径地址,这里的前提是在本地开启了一个zookeeper的服务
# 如果本地没有zookeeper服务,可以参考下一节中zookeeper的安装、配置及运行
zookeeper.connect=192.168.2.101:2181/kafka
我的配置的是本地虚拟机安装的zk,也可在windows安装利用cmd命令终端启动。(/kafka指定的是kafka元数据在zk的存储路径,不配置无法生成cluster.id会报空指针异常)
- 8:配置kafka启动运行参数
这里配置Main class为kafka.Kafka,并制定启动时所需要的配置文件地址,即:config/server.properties。配置JMX_PORT是为了方便搜集Kafka自身的Metrics监控数据
- 9:在core/src/main下创建resources目录,并把config/log4j.properties文件复制到已经创建的resources/下(为了打印运行日志,放在resources下会自动加载)。修改log4j.properties,不然控制没有日志输出,不输出时再修改,如果正常输出可不改。
log4j.rootLogger=INFO, stdout, kafkaAppender
修改为log4j.rootLogger=DEBUG, stdout, kafkaAppender
- 10:运行(第一次启动时会有一个耗时较长的编译过程)。我的运行时报kafka.kafka类没有发现。解决措施:删除第8步设置的配置,先运行kafka.main根据生成的配置edit configuration中在执行传参program arguments中增加config/server.properties即可运行。
成功启动,源码阅读进行中…
1:源码搭建问题汇总
1:关于在gradle.builder中的报错一般是由于idea未配置gradle导致的,配置完下载相关依赖即可正常
2:kafka.kafka主类运行时不输出日志,报SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“. 在build.gradle中找到project(‘:core’) { 模块的配置项,修改dependencies 中的compile改为implementation,并注释 compile(libs.zookeeper) { 中的
/* exclude module: ‘slf4j-log4j12’ exclude module: ‘log4j’*/
dependencies {
implementation project(':clients')
implementation libs.jacksonDatabind
implementation libs.joptSimple
implementation libs.metrics
implementation libs.scalaLibrary
// only needed transitively, but set it explicitly to ensure it has the same version as scala-library
implementation libs.scalaReflect
implementation libs.scalaLogging
implementation libs.slf4jApi
implementation(libs.zkclient) {
exclude module: 'zookeeper'
}
compile(libs.zookeeper) {
/* exclude module: 'slf4j-log4j12'
exclude module: 'log4j'*/
exclude module: 'netty'
}
3:运行kafka报错:
USAGE: java [options] KafkaServer server.properties [--override property=value]*
Option
kafka启动必须知道server.properties配置文件路径。配置参加上面第10步。