点击上方“编程公举小柴柴”关注!
一、准备工作
1、tools
java: 1.8.0_171,java -version
scala: 2.11.12, scala -version,需要和kafka/gradle.properties中版本一致。
gradle: 5.4,gradle -v
maven: 3.6.1,mvn -v
2、下载kafka源码
git clone git@github.com:apache/kafka.git -b 2.0.1
github下载慢,使用gitee.com导入github项目,再使用gitee提供的链接下载
3、编译kafka
1) 添加aliyun maven仓库
在build.gradle文件中作如下修改:
在jcenter()的上面加上aliyun maven center:
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
jcenter()
2) 修改依赖版本
在build.gradle文件中修改
classpath 'org.scoverage:gradle-scoverage:2.1.0' => classpath 'org.scoverage:gradle-scoverage:2.5.0'
3) gradle idea
二、使用idea运行kafka
1、安装正确的scala版本,保持本机scala version和gradle.properties中一致
首先确保gradle.properties配置文件中的scalaVersion与安装的一致。gradle.properties配置文件的细节如下:
group=org.apache.kafka
# NOTE: When you change this version number, you should also make sure to update
# the version numbers in tests/kafkatest/__init__.py and kafka-merge-pr.py.
version=1.0.0
scalaVersion=2.11.11
task=build
org.gradle.jvmargs=-XX:MaxPermSize=512m -Xmx1024m -Xss2m
如果更改了scalaVersion,需要重新执行gradle idea命令来重新构建。虽然很多时候在操作系统中安装其他版本的Scala也并没有什么问题,比如安装2.12.4版本。但是有些情况下运行Kafka时会出现一些异常,而这些异常却又是由于Scala版本不一致而引起的,比如会出现下面示例中的报错:
[2017-11-13 17:09:21,119] FATAL (kafka.Kafka$)
java.lang.NoSuchMethodError: scala.collection.TraversableOnce.$init$(Lscala/collection/TraversableOnce;)V
at kafka.message.MessageSet.(MessageSet.scala:72)
at kafka.message.ByteBufferMessageSet.(ByteBufferMessageSet.scala:129)
at kafka.message.MessageSet$.(MessageSet.scala:32)
at kafka.message.MessageSet$.(MessageSet.scala)
at kafka.server.Defaults$.(KafkaConfig.scala:52)
at kafka.server.Defaults$.(KafkaConfig.scala)
at kafka.server.KafkaConfig$.(KafkaConfig.scala:686)
at kafka.server.KafkaConfig$.(KafkaConfig.scala)
at kafka.server.KafkaServerStartable$.fromProps(KafkaServerStartable.scala:28)
at kafka.Kafka$.main(Kafka.scala:82)
at kafka.Kafka.main(Kafka.scala)
所以为了省去一些不必要的麻烦,还是建议读者在安装Scala版本之前先查看下Kafka源码中gradle.properties文件中配置的scalaVersion。
2、创建log4j.properties
再确保了scalaVersion之后,创建kafka/core/src/main/resources目录,添加为resource,将config目录下的log4j.properties文件拷贝到kafka/core/src/main/resources目录下,这样可以让Kafka在运行时能够输出日志信息,可以参考下图:
3、创建kafka/tmp/server.properties文件
之后还需要配置kafka/tmp/server.properties文件,一般只需要修改以下一些配置项:
# 是否允许topic被删除,设置为true则topic可以被删除,
# 开启这个功能方便Kafka在运行一段时间之后,能够删除一些不需要的临时topic
delete.topic.enable=true
# 禁用自动创建topic的功能
auto.create.topics.enable=false
# 存储log文件的目录,默认值为/tmp/kafka-logs
log.dir=/tmp/kafka/kafka-logs
# 配置kafka依赖的zookeeper路径地址,这里的前提是在本地开启了一个zookeeper的服务
# 如果本地没有zookeeper服务,可以参考下一节中zookeeper的安装、配置及运行
zookeeper.connect=localhost:2181/kafka
4、core_main添加slf4j-log4j12包,结果如下图:
5、配置kafka启动参数
之后配置Kafka的启动参数,详细参考下图:
这里配置Main class为kafka.Kafka,并制定启动时所需要的配置文件地址,即:kafka/tmp/server.properties。配置JMX_PORT是为了方便搜集Kafka自身的Metrics数据。
如此便可以顺利的运行Kafka服务了(第一次启动时会有一个耗时较长的编译过程)
喜欢可以点分享、赞、在看!