欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-source-code-environment-build/

本文主要讲述的是如何搭建Kafka的源码环境,主要针对的Windows操作系统下IntelliJ IDEA编译器,其余操作系统或者IDE可以类推。

1.安装和配置JDK

确认JDK版本至少为1.7,最好是1.8及以上。使用java -version命令来查看当前JDK的版本,示例如下:

C:\Users\hidden> java -version
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)

2.下载并安装配置Gradle

下载地址为:https://gradle.org/releases/,笔者使用的版本是3.1。一般只需要将下载的包解压,然后再将$GRADLE_HOME/bin的路径添加到环境变量Path中即可,其中$GRADLE_HOME指的是Gradle的根目录。可以使用gradle -v命令来验证Gradle是否已经配置完成,示例如下:

C:\Users\hidden>gradle -v------------------------------------------------------------
Gradle 3.1
------------------------------------------------------------Build time:   2016-09-19 10:53:53 UTC
Revision:     13f38ba699afd86d7cdc4ed8fd7dd3960c0b1f97Groovy:       2.4.7
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_112 (Oracle Corporation 25.112-b15)
OS:           Windows 10 10.0 amd64

3.下载并安装配置Scala

下载地址为:http://www.scala-lang.org/download/all.html,目前最新的版本是2.12.4,不过笔者这里使用的版本是2.11.11。如Gradle一样,只需要解压并将$SCALA_HOME/bin的路径添加到环境变量Path即可,其中$SCALA_HOME指的是Scala的根目录。可以使用scala -version命令来验证scala是否已经配置完成,示例如下:

C:\Users\hidden>scala -version
Scala code runner version 2.11.11 -- Copyright 2002-2017, LAMP/EPFL

4. 构建Kafka源码环境

Kafka下载地址为:http://kafka.apache.org/downloads,目前最新的版本是1.0.0。将下载的压缩包解压,并在Kafka的根目录执行gradle idea命令进行构建,如果你使用的是Eclipse,则只需采用gradle eclipse命令构建即可。构建细节如下所示:

D:\IntelliJ IDEA Files\kafka-sources\kafka-1.0.0-src>gradle idea
Starting a Gradle Daemon, 2 incompatible and 1 stopped Daemons could not be reused, use --status for details
Building project 'core' with Scala version 2.11.11
:ideaModule
:ideaProject
(......省略若干......)
:streams:examples:ideaModule
:streams:examples:ideaBUILD SUCCESSFULTotal time: 1 mins 11.991 secs

之后将Kafka导入到IDEA中即可。不过这样还没有结束,对于IDEA而言,还需要安装Scala插件,在Setting->Plugin中搜索scala并安装,可以参考下图,笔者这里是已经安装好的状态:

5. 配置Kafka源码环境

前面几个步骤执行完成后就可以很舒适的阅读Kafka的源码,但是如果需要启动Kafka的服务还需要一些额外的步骤。

首先确保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;)Vat kafka.message.MessageSet.<init>(MessageSet.scala:72)at kafka.message.ByteBufferMessageSet.<init>(ByteBufferMessageSet.scala:129)at kafka.message.MessageSet$.<init>(MessageSet.scala:32)at kafka.message.MessageSet$.<clinit>(MessageSet.scala)at kafka.server.Defaults$.<init>(KafkaConfig.scala:52)at kafka.server.Defaults$.<clinit>(KafkaConfig.scala)at kafka.server.KafkaConfig$.<init>(KafkaConfig.scala:686)at kafka.server.KafkaConfig$.<clinit>(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。

再确保了scalaVersion之后,需要将config目录下的log4j.properties文件拷贝到core/src/main/scala目录下,这样可以让Kafka在运行时能够输出日志信息,可以参考下图:

之后还需要配置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

之后配置Kafka的启动参数,详细参考下图:

这里配置Main class为kafka.Kafka,并制定启动时所需要的配置文件地址,即:config/server.properties。配置JMX_PORT是为了方便搜集Kafka自身的Metrics数据。

如此便可以顺利的运行Kafka服务了(第一次启动时会有一个耗时较长的编译过程),部分启动日志如下:

[2017-11-14 00:24:14,472] INFO KafkaConfig values: advertised.host.name = nulladvertised.listeners = nulladvertised.port = nullauthorizer.class.name =
(......省略若干......)
[2017-11-14 00:24:35,001] INFO Registered broker 0 at path /brokers/ids/0 with addresses: EndPoint(LAPTOP-1IN9UPT7,9092,ListenerName(PLAINTEXT),PLAINTEXT) (kafka.utils.ZkUtils)
[2017-11-14 00:24:35,019] INFO Kafka version : 1.0.0 (org.apache.kafka.common.utils.AppInfoParser)
[2017-11-14 00:24:35,020] INFO Kafka commitId : e89bffd6b2eff799 (org.apache.kafka.common.utils.AppInfoParser)
[2017-11-14 00:24:35,021] INFO [Kafka Server 0], started (kafka.server.KafkaServer)

6. Zookeeper的安装、配置及启动

Kafka需要使用Zookeeper来管理元数据,比如记录topic、partitions(分区)以及replica(副本)的分配信息。由于这里只是阐述如何构建Kafka的源码环境搭建,所以这里的Zookeeper的安装也以极简为主,即采用单机配置。Zookeeper下载地址为:http://zookeeper.apache.org/releases.html,下载之后解压,然后将$ZOOKEEPER_HOME目录下的conf/zoo_sample.cfg重命名为zoo.cfg,其中$ZOOKEEPER_HOME指的是ZooKeeper的根目录。

修改$ZOOKEEPER_HOME/conf/zoo.cfg配置,示例配置如下(其余配置可以不做修改):

dataDir=D:\\zookeeper-3.4.10\\tmp\\zookeeper\\data

将$ZOOKEEPER_HOME/bin配置到Path中,之后直接运行zkServer命令即可开启Zookeeper服务。示例如下:

C:\Users\hidden>zkServerC:\Users\hidden>call "C:\Program Files\Java\jdk1.8.0_112"\bin\java "-Dzookeeper.log.dir=D:\zookeeper-3.4.10\bin\.." "-Dzookeeper.root.logger=INFO,CONSOLE" -cp "D:\zookeeper-3.4.10\bin\..\build\classes;D:\zookeeper-3.4.10\bin\..\build\lib\*;D:\zookeeper-3.4.10\bin\..\*;D:\zookeeper-3.4.10\bin\..\lib\*;D:\zookeeper-3.4.10\bin\..\conf" org.apache.zookeeper.server.quorum.QuorumPeerMain "D:\zookeeper-3.4.10\bin\..\conf\zoo.cfg"
2017-11-14 00:44:20,135 [myid:] - INFO  [main:QuorumPeerConfig@134] - Reading configuration from: D:\zookeeper-3.4.10\bin\..\conf\zoo.cfg
2017-11-14 00:44:20,147 [myid:] - INFO  [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
2017-11-14 00:44:20,147 [myid:] - INFO  [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 0
2017-11-14 00:44:20,147 [myid:] - INFO  [main:DatadirCleanupManager@101] - Purge task is not scheduled.
2017-11-14 00:44:20,150 [myid:] - WARN  [main:QuorumPeerMain@113] - Either no config or no quorum defined in config, running  in standalone mode
2017-11-14 00:44:20,250 [myid:] - INFO  [main:QuorumPeerConfig@134] - Reading configuration from: D:\zookeeper-3.4.10\bin\..\conf\zoo.cfg
2017-11-14 00:44:20,250 [myid:] - INFO  [main:ZooKeeperServerMain@96] - Starting server

欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-source-code-environment-build/


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


Kafka源码环境搭建相关推荐

  1. 使用IntelliJ IDEA搭建kafka源码环境时遇到Output path错误解决办法

    kafka源码环境搭建好之后,需要在IntelliJ IDEA开发工具中以debug方式启动kafka服务器来测试消息的生产和消费. 但是在启动kafka.Kafka类中的main方法(也就是运行 k ...

  2. 聊聊 Kafka:编译 Kafka 源码并搭建源码环境

    一.前言 老周这里编译 Kafka 的版本是 2.7,为啥采用这个版本来搭建源码的阅读环境呢?因为该版本相对来说比较新.而我为啥不用 2.7 后的版本呢?比如 2.8,这是因为去掉了 ZooKeepe ...

  3. kafka项目启动_Kafka 探险 源码环境搭建

    这个 Kafka 的专题,我会从系统整体架构,设计到代码落地.和大家一起杠源码,学技巧,涨知识.希望大家持续关注一起见证成长! 我相信:技术的道路,十年如一日!十年磨一剑! 前言 在阅读源码之前,首先 ...

  4. spring boot 源码_SpringBoot2.1.x源码环境搭建详解

    前言 笔者试着从GitHub上拉取SpringBoot源码.然鹅,在本地IDEA打开后,爆各种编译错误,各种问题.经过反复操作,现在总结一下SpringBoot源码环境搭建的实践,便于后期对于源码的学 ...

  5. zookeeper3.5.4源码环境搭建

    zookeeper3.5.4源码环境搭建 1. 准备工作 渠道 地址 网盘 zk源码下载地址 提取码:5555 注意:因为zookeeper是由ant来构建的,所以需要使用ant命令来转换成工程,然后 ...

  6. Android源码环境搭建(aosp Ubuntu 16.04)

    Android源码环境搭建(aosp Ubuntu 16.04) FrameWork入门课视频链接:https://edu.csdn.net/course/detail/30298 FrameWork ...

  7. datax源码环境搭建

    文章目录 datax源码环境搭建 写在前面 环境 下载源码并编译 错误1 错误2 运行 生产模式 debug模式 datax源码环境搭建 写在前面 DataX 是阿里巴巴集团内被广泛使用的离线数据同步 ...

  8. ZooKeeper源码阅读心得分享+源码基本结构+源码环境搭建

    首发CSDN:徐同学呀,原创不易,转载请注明源链接.我是徐同学,用心输出高质量文章,希望对你有所帮助. 一.心得分享 如何阅读ZooKeeper源码?从哪里开始阅读?最近把ZooKeeper源码看了个 ...

  9. win10环境下的spark2.4源码环境搭建

    spark2.4源码环境搭建 1.概述 2.版本信息及环境 3.基础环境准备 4.源码准备 5.IDEA设置 5.1 IDEA内maven插件设置与更新 5.2 IDEA内导入spark各个模块 6. ...

最新文章

  1. 移植opencv2.4.9到itop4412开发板
  2. openoffice linux 目录,Linux之安装OpenOffice
  3. 前前前世用计算机,前前前世
  4. Reading Club Questions Feedback
  5. 在ubuntu 16.04上安装tensorflow,并测试成功
  6. php hsetnx,HSETNX命令_视频讲解_用法示例-redis编程词典-php中文网
  7. C语言-输入一个正整数,输出它的所有质数因子
  8. symfony框架_为什么我们放弃传统的Symfony框架
  9. Java基础学习总结(141)——Cron 表达式使用再总结
  10. 【路径规划】基于matlab GUI人工势场算法机器人避障路径规划(手动设障)【含Matlab源码 617期】
  11. css样式,层叠顺序属性z-index
  12. 计算机网络连接设备不见了,怎么办电脑网络连接不见了
  13. html img标签alt属性吗,img标签可以不用alt属性吗
  14. 阿里数据中台与OneData
  15. 快速入门JavaScript(一)
  16. DM8 2节点DSC+DW搭建及故障测试
  17. 家用计算机历史记录,如何查看计算机使用历史记录,只需几个简单步骤即可查看...
  18. 渗透测试-SQL注入之sqlmap的使用方法及实战案例
  19. 数据中流击水,浪遏飞舟 ——2017中国存储峰会在京盛大开幕
  20. Ardunio开发实例-线性电位计

热门文章

  1. unity微信分享及回调
  2. ecshop后台出现Strict Standards: Only variables should be passed by refin /var/www·····
  3. Kinect安装与使用(一)
  4. 绝对值用计算机怎么打,绝对值符号怎么打
  5. Value ‘0000-00-00 00:00:00‘ can not be represented as java.sql.Timestamp
  6. 【GAMES-202实时渲染】1、软阴影01(Shadow Mapping、Peter Panning、PCSS原理超详细)
  7. 苹果新款MacBook Pro可能会有SD卡插槽
  8. Spring Boot启动之Hello World
  9. 存储基础:DAS/NAS/SAN存储类型及应用
  10. 基金股市理财经验分享(个人体会)