在windows下,使用idea 阅读kafka2.x源代码
1.前提
必读 kafka ReadMe
https://github.com/apache/kafka/blob/trunk/README.md
Apache Kafka
See our web site for details on the project.
You need to have Gradle and Java installed.
Kafka requires Gradle 5.0 or higher.
Java 8 should be used for building in order to support both Java 8 and Java 11 at runtime.
Scala 2.12 is used by default, see below for how to use a different Scala version or all of the supported Scala version
环境准备
- git ;
- Idea ;
- Scala 插件;
- Jdk 版本号:1.8以上 ;
- Gradle 版本号:5.0以上;
- Scala sdk版本号:2.12(官方推荐);
注意事项
- scala插件和Idea插件保持一致,能够兼容,详见:插件安装方法 ( 三 插件版本和Idea版本保持一致);
- Jdk 安装后,Java -version 验证安装版本,并在Idea内进行配置;
- Gradle 安装后,gradle -v 验证安装版本,注意配置国内的镜像(如阿里云等),并在Idea内进行配置;
- Scala 安装后,scala -version验证安装版本,并在Idea内进行配置;
2. 源码下载
方式(一)
直接下载:
http://kafka.apache.org/downloads
方式(二)
github: 使用git clone命令
地址 https://github.com/apache/kafka.git
3.编译kafka源码
在cmd窗口,切换路径到kafka源码路径,执行gradle idea命令(如果是eclipse 执行gradle eclipse);
第一次比较慢,gradle 最好已经配置国内镜像;
D:\BigDataLearning\All-src-learing\kafka-master-2.x>gradle idea
Starting a Gradle Daemon (subsequent builds will be faster)
> Configure project :
Building project 'core' with Scala version 2.12.0
Building project 'streams-scala' with Scala version 2.12.0
> Task :idea
Generated IDEA project at file:///D:/BigDataLearning/All-src-learing/kafka-master-2.x/kafka-master-2.x.ipr
Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.1.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 18s
4.启动Zookeeper
Kafka的运行依赖于Zookeeper,在运行Kafka之前我们需要安装并运行Zookeeper
(1)下载安装
下载安装文件: http://zookeeper.apache.org/releases.html,并解压文件
(2)修改配置
在zookeeper-3.4.13\conf,把zoo_sample.cfg重命名成zoo.cfg
从文本编辑器里打开zoo.cfg,把dataDir的值改成“D:\\BigDataLearning\\All-src-learing\\kafka-master\\logs”
(3) 添加如下系统变量:
- ZOOKEEPER_HOME: D:\BDLTools\Zookeeper\zookeeper-3.4.12(存放Zookeeper的目录)
- Path: 在现有的值后面添加 ";%ZOOKEEPER_HOME%\bin;"
(4)运行Zookeeper: 打开cmd然后执行 zkserver,如下图示:
5.环境配置
在Idea 中导入该项目,把日志打印出来
(1)复制config/log4.properties到core/src/main/scala目录下
(2)之后还需要配置server.properties文件,一般只需要修改以下一些配置项:
# 是否允许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=localhost:2181/kafka
配置program arguments参数设置:
config/server.properties
接下来,启动main函数
(3)出现以下日常
log4j:WARN No appenders could be found for logger (kafka.utils.Log4jControllerRegistration$).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
在project structure中加入 slf4j-log4j12-1.7.7.jar和log4j-1.2.17.jar 两个日志包
(此方法,简单省事,当然也可以在build.gradle中添加对应的配置来添加包)
(4)出现以下异常
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
找到kafka.scala Edit configurations在VM options自己配置两个参数
-Dkafka.logs.dir=D:\BigDataLearning\All-src-learing\kafka-master\logs
-Dlog4j.configuration=file:D:\BigDataLearning\All-src-learing\kafka-master\config\log4j.properties
6.启动
在cmd窗口,输入"zkServer"先启动Zookeeper,
之后,启动kafka main函数,如下图示:
参考: