前言
虽然网上教程很多,但是我依然要写系列
因为我踩到的坑有的是网上没有遇到过的
详细步骤
克隆源码
git clone https://github.com/apache/kafka.git
这个时候切记不能先用idea直接打开项目!
这个时候切记不能先用idea直接打开项目!
这个时候切记不能先用idea直接打开项目!
打包环境
kafka自带了一些Gradle的Task,可以生成出导入Eclipse或者Idea配置。
在Kafka目录下执行
1 | ./gradlew jar |
这个时候目录下会出现一个文件叫kafka.ipr
在finder中双击这个文件,idea会自动打开并导入项目。
注:也就是这个时候才会打开Idea
配置Gradle
一般Idea打开会,右下角会弹出一个框,大致意思是:
我们检测出这个是Gradle项目,需要导入Gradle的配置吗?
这个时候,点击确认就行。
如果打开Idea啥也没发生,那么就需要我们自己打开文件build.gradle
然后进行刷新之类的操作,具体我也忘了怎么操作的。
修改配置
一些配置的修改是比较重要的
- 文件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
24scalaCompileOptions.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
5dependencies {
compile project(':clients')
compile libs.jacksonDatabind
compile libs.jacksonModuleScala
~~~
这种配置
在compileOnly libs.log4j
这一行的下面,加上compile libs.slf4jlog4j
这个修改主要是终端启动Kafka的时候日志打印不出来的问题
很多的网上的答案都是让自己把两个依赖加进去,但是我发现其实Kafka配置了两个依赖,但是却没有Compile,所以不需要自己加进去,只要加上这行配置就行
- 配置log4j文件
第一步:把config目录下的log4j.properties文件复制到core/src/main/resources目录下
需要创建rescources目录
如图所示:
并不是很多网上说的复制到/scala目录下
第二步:修改log4j.properties文件
主要是把很多的${kafka.logs.dir}
这种变量去掉,换成自己电脑上的绝对路径
启动配置
下面就是启动配置了,这个网上都有,我就直接复制一下
首先得自己启动一个Zookeeper进程
Broker
Consumer
Program arguments可根据自己的情况修改
produer
Program arguments可根据自己的情况修改