Kafka源码环境搭建
欢迎支持笔者新作:《深入理解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源码环境搭建相关推荐
- 使用IntelliJ IDEA搭建kafka源码环境时遇到Output path错误解决办法
kafka源码环境搭建好之后,需要在IntelliJ IDEA开发工具中以debug方式启动kafka服务器来测试消息的生产和消费. 但是在启动kafka.Kafka类中的main方法(也就是运行 k ...
- 聊聊 Kafka:编译 Kafka 源码并搭建源码环境
一.前言 老周这里编译 Kafka 的版本是 2.7,为啥采用这个版本来搭建源码的阅读环境呢?因为该版本相对来说比较新.而我为啥不用 2.7 后的版本呢?比如 2.8,这是因为去掉了 ZooKeepe ...
- kafka项目启动_Kafka 探险 源码环境搭建
这个 Kafka 的专题,我会从系统整体架构,设计到代码落地.和大家一起杠源码,学技巧,涨知识.希望大家持续关注一起见证成长! 我相信:技术的道路,十年如一日!十年磨一剑! 前言 在阅读源码之前,首先 ...
- spring boot 源码_SpringBoot2.1.x源码环境搭建详解
前言 笔者试着从GitHub上拉取SpringBoot源码.然鹅,在本地IDEA打开后,爆各种编译错误,各种问题.经过反复操作,现在总结一下SpringBoot源码环境搭建的实践,便于后期对于源码的学 ...
- zookeeper3.5.4源码环境搭建
zookeeper3.5.4源码环境搭建 1. 准备工作 渠道 地址 网盘 zk源码下载地址 提取码:5555 注意:因为zookeeper是由ant来构建的,所以需要使用ant命令来转换成工程,然后 ...
- Android源码环境搭建(aosp Ubuntu 16.04)
Android源码环境搭建(aosp Ubuntu 16.04) FrameWork入门课视频链接:https://edu.csdn.net/course/detail/30298 FrameWork ...
- datax源码环境搭建
文章目录 datax源码环境搭建 写在前面 环境 下载源码并编译 错误1 错误2 运行 生产模式 debug模式 datax源码环境搭建 写在前面 DataX 是阿里巴巴集团内被广泛使用的离线数据同步 ...
- ZooKeeper源码阅读心得分享+源码基本结构+源码环境搭建
首发CSDN:徐同学呀,原创不易,转载请注明源链接.我是徐同学,用心输出高质量文章,希望对你有所帮助. 一.心得分享 如何阅读ZooKeeper源码?从哪里开始阅读?最近把ZooKeeper源码看了个 ...
- win10环境下的spark2.4源码环境搭建
spark2.4源码环境搭建 1.概述 2.版本信息及环境 3.基础环境准备 4.源码准备 5.IDEA设置 5.1 IDEA内maven插件设置与更新 5.2 IDEA内导入spark各个模块 6. ...
最新文章
- 移植opencv2.4.9到itop4412开发板
- openoffice linux 目录,Linux之安装OpenOffice
- 前前前世用计算机,前前前世
- Reading Club Questions Feedback
- 在ubuntu 16.04上安装tensorflow,并测试成功
- php hsetnx,HSETNX命令_视频讲解_用法示例-redis编程词典-php中文网
- C语言-输入一个正整数,输出它的所有质数因子
- symfony框架_为什么我们放弃传统的Symfony框架
- Java基础学习总结(141)——Cron 表达式使用再总结
- 【路径规划】基于matlab GUI人工势场算法机器人避障路径规划(手动设障)【含Matlab源码 617期】
- css样式,层叠顺序属性z-index
- 计算机网络连接设备不见了,怎么办电脑网络连接不见了
- html img标签alt属性吗,img标签可以不用alt属性吗
- 阿里数据中台与OneData
- 快速入门JavaScript(一)
- DM8 2节点DSC+DW搭建及故障测试
- 家用计算机历史记录,如何查看计算机使用历史记录,只需几个简单步骤即可查看...
- 渗透测试-SQL注入之sqlmap的使用方法及实战案例
- 数据中流击水,浪遏飞舟 ——2017中国存储峰会在京盛大开幕
- Ardunio开发实例-线性电位计
热门文章
- unity微信分享及回调
- ecshop后台出现Strict Standards: Only variables should be passed by refin /var/www·····
- Kinect安装与使用(一)
- 绝对值用计算机怎么打,绝对值符号怎么打
- Value ‘0000-00-00 00:00:00‘ can not be represented as java.sql.Timestamp
- 【GAMES-202实时渲染】1、软阴影01(Shadow Mapping、Peter Panning、PCSS原理超详细)
- 苹果新款MacBook Pro可能会有SD卡插槽
- Spring Boot启动之Hello World
- 存储基础:DAS/NAS/SAN存储类型及应用
- 基金股市理财经验分享(个人体会)