一、引言
初学一个技术,怎么了解该技术的源码至关重要。
对我而言,最佳的阅读源码的方式,那就是:不求甚解,观其大略
你如果进到庐山里头,二话不说,蹲下头来,弯下腰,就对着某棵树某棵小草猛研究而不是说先把庐山的整体脉络研究清楚了,那么你的学习方法肯定效率巨低而且特别痛苦。
最重要的还是慢慢地打击你的积极性,说我的学习怎么那么不 happy 啊,怎么那么没劲那,因为你的学习方法错了,大体读明白,先拿来用,用着用着,很多道理你就明白了。
先从整体上把关源码,再去扣一些细节问题。
举个简单的例子:
如果你刚接触 HashMap,你刚有兴趣去看其源码,在看 HashMap 的时候,有一个知识:当链表长度达到 8 之后,就变为了红黑树,小于 6 就变成了链表,当然,还和当前的长度有关。
这个时候,如果你去深究红黑树、为什么是 8 不是别的,又去查 泊松分布,最终会慢慢的搞死自己。
所以,正确的做法,我们先把这一部分给略过去,知道这个概念即可,等后面我们把整个庐山看完之后,再回过头抠细节。
当然,本章我们不会讲述一些知识,重点在于 Kafka源码环境的搭建
二、前期准备
1. 安装 JDK1.8
这个就不介绍了,既然你能看到这篇文章,想必你一定安装完了 JDK1.8
2. 安装Zookeeper
这里选择的 Zookeeper
版本为 3.4.9
下载地址:https://mirrors.cnnic.cn/apache/zookeeper/
建议安装目录:D:\zookeeper-3.4.9
将在 D:\zookeeper-3.4.9\conf
中把 zoo_sample.cfg
修改为 zoo.cfg
文件,内容做以下修改
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=D:\\zookeeper-3.4.9\\data dataLogDir=D:\\zookeeper-3.4.9\\log # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1
最后 cmd
进入 D:\zookeeper-3.4.9\bin
的目录,执行 zkServer.cmd
即可启动 Zookeeper
我们可执行 zkCli.cmd
输入一些命令,进行验证:create /kafka 123
3. 安装 Gradle
这里选择的 Gradle
的版本是 4.10.3
下载地址:https://gradle.org/releases/
建议安装目录:D:\gradle-4.10.3-all\gradle-4.10.3
配置环境变量:
GRADLE_HOME = D:\gradle-4.10.3-all\gradle-4.10.3 path = D:\gradle-4.10.3-all\gradle-4.10.3\bin
**验证:**在 cmd
输入 gradle -v
显示版本号既安装成功
4. 安装 scala
这里选择的 scala
的版本是 2.12.11
下载地址:https://www.scala-lang.org/download/
建议安装目录:D:\scala
配置环境变量:
SCALA_HOME = D:\scala Path = %SCALA_HOME%\bin
**验证:**在 cmd
输入 scala
显示版本号既安装成功
二、Kafka 源码构建
1. 源码下载
这里选择的 kafka
的版本是 0.10.0.1
建议安装目录:D:\kafka-0.10.0.1-src
通过 cmd
请求进入该目录,执行 gradle idea
命令进行构建。
加快速度:
mavenLocal() maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
2. 问题解决
不出意外的话,应该会报错如下的错误:
[root@bigdata01 kafka-0.10.0.0-src]# gradle idea Starting a Gradle Daemon (subsequent builds will be faster) Building project 'core' with Scala version 2.10.6 FAILURE: Build failed with an exception. * Where: Build file 'kafka-0.10.0.1-src/build.gradle' line: 233 * What went wrong: A problem occurred evaluating root project 'kafka-0.10.0.1-src'. > Failed to apply plugin [class 'org.gradle.api.plugins.scala.ScalaBasePlugin'] > No such property: useAnt for class: org.gradle.api.tasks.scala.ScalaCompileOptions * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED
简单来说,我们 kafka-0.10.0.1-src/build.gradle
这个文件,缺失了一些东西,需要进行补充。
将下面的信息添加到 kafka-0.10.0.1-src/build.gradle
文件中,即可编译成功。
ScalaCompileOptions.metaClass.daemonServer = true ScalaCompileOptions.metaClass.fork = true ScalaCompileOptions.metaClass.useAnt = false ScalaCompileOptions.metaClass.useCompileDaemon = false
3. 编译成功
这里等待的时间可能会稍长,在 10min~90min
不等,等编译完成后,我们就可以使用了。
三、配置kafka
1. 日志的修改
将我们的 log4j.properties
的日志文件配置移动到我们 core/src/main/scala
中的 resources
中。如下图所示:
2. 服务端
服务端的配置如下:
3. 客户端
客户端主要包括我们的生产者和消费者
3.1 生产者
生产者的配置如下:
3.2 消费者
消费者的配置如下:
四、启动 Kafka
1. 启动 Zookeeper
- 启动
D:\zookeeper-3.4.9\bin
中的zkServer.cmd
- 启动
D:\zookeeper-3.4.9\bin
中的zkCli.cmd
。建议使用ls /
来验证当前的zookeeper
是否成功
2. 启动服务端
启动我们刚刚的 Kafka
,出现如下证明服务端启动成功。
3. 启动客户端
3.1 生产者
3.2 消费者
3.3 消息发送
当我们在 Producer
中输入 hello world
时,我们的消费端会显示 hello world
- 生产者
消费者