0%

Kafka指南-源码导入Idea

前言

虽然网上教程很多,但是我依然要写系列
因为我踩到的坑有的是网上没有遇到过的

详细步骤

克隆源码

git clone https://github.com/apache/kafka.git

这个时候切记不能先用idea直接打开项目!
这个时候切记不能先用idea直接打开项目!
这个时候切记不能先用idea直接打开项目!

打包环境

kafka自带了一些Gradle的Task,可以生成出导入Eclipse或者Idea配置。
在Kafka目录下执行

1
2
./gradlew jar
./gradlew idea

这个时候目录下会出现一个文件叫kafka.ipr
在finder中双击这个文件,idea会自动打开并导入项目。
注:也就是这个时候才会打开Idea

配置Gradle

一般Idea打开会,右下角会弹出一个框,大致意思是:

我们检测出这个是Gradle项目,需要导入Gradle的配置吗?

这个时候,点击确认就行。

如果打开Idea啥也没发生,那么就需要我们自己打开文件build.gradle
然后进行刷新之类的操作,具体我也忘了怎么操作的。

修改配置

一些配置的修改是比较重要的

  1. 文件build.gradle
    第一处修改:
    找到tasks.withType(ScalaCompile) {这一行
    修改scalaCompileOptions.additionalParameters的配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
        scalaCompileOptions.additionalParameters = [
    "-nowarn", //新增
    "-deprecation",
    "-unchecked",
    "-encoding", "utf8",
    "-Xlog-reflective-calls",
    "-feature",
    "-language:postfixOps",
    "-language:implicitConversions",
    "-language:existentials",
    // "-Xlint:constant", //注释
    // "-Xlint:delayedinit-select",
    // "-Xlint:doc-detached",
    // "-Xlint:missing-interpolator",
    // "-Xlint:nullary-override",
    // "-Xlint:nullary-unit",
    // "-Xlint:option-implicit",
    // "-Xlint:package-object-classes",
    // "-Xlint:poly-implicit-overload",
    // "-Xlint:private-shadow",
    // "-Xlint:stars-align",
    // "-Xlint:type-parameter-shadow",
    // "-Xlint:unused"
    ]

第二处修改:
还有tasks.withType(JavaCompile) {这一行
修改为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
// options.compilerArgs << "-Xlint:all"
// temporary exclusions until all the warnings are fixed
// options.compilerArgs << "-Xlint:-rawtypes"
// options.compilerArgs << "-Xlint:-serial"
// options.compilerArgs << "-Xlint:-try"
// options.compilerArgs << "-Werror"
// --release is the recommended way to select the target release, but it's only supported in Java 9 so we also
// set --source and --target via `sourceCompatibility` and `targetCompatibility`. If/when Gradle supports `--release`
// natively (https://github.com/gradle/gradle/issues/2510), we should switch to that.
if (JavaVersion.current().isJava9Compatible())
options.compilerArgs << "--release" << minJavaVersion
}

上面两个修改主要是为了Idea启动时编译,会把一堆warn当做Error报出来,Gradle不给启动

第三处修改:
找到project(':core') {这一行
下面会有一堆

1
2
3
4
5
dependencies {
compile project(':clients')
compile libs.jacksonDatabind
compile libs.jacksonModuleScala
~~~

这种配置
compileOnly libs.log4j这一行的下面,加上
compile libs.slf4jlog4j

这个修改主要是终端启动Kafka的时候日志打印不出来的问题

很多的网上的答案都是让自己把两个依赖加进去,但是我发现其实Kafka配置了两个依赖,但是却没有Compile,所以不需要自己加进去,只要加上这行配置就行

  1. 配置log4j文件
    第一步:把config目录下的log4j.properties文件复制到core/src/main/resources目录下
    需要创建rescources目录
    如图所示:

并不是很多网上说的复制到/scala目录下

第二步:修改log4j.properties文件
主要是把很多的${kafka.logs.dir}这种变量去掉,换成自己电脑上的绝对路径

启动配置

下面就是启动配置了,这个网上都有,我就直接复制一下

首先得自己启动一个Zookeeper进程

Broker

Consumer

Program arguments可根据自己的情况修改

produer

Program arguments可根据自己的情况修改