【Kafka从成神到升仙系列 一】Kafka源码环境搭建

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【Kafka从成神到升仙系列 一】Kafka源码环境搭建

一、引言

初学一个技术,怎么了解该技术的源码至关重要。

对我而言,最佳的阅读源码的方式,那就是:不求甚解,观其大略

你如果进到庐山里头,二话不说,蹲下头来,弯下腰,就对着某棵树某棵小草猛研究而不是说先把庐山的整体脉络研究清楚了,那么你的学习方法肯定效率巨低而且特别痛苦。

最重要的还是慢慢地打击你的积极性,说我的学习怎么那么不 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

下载地址:http://kafka.apache.org/

建议安装目录: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

  • 生产者


e095696a772045309c802ac61663cc3e.png

消费者






相关文章
|
5月前
|
消息中间件 分布式计算 Kafka
亿万级别Kafka演进之路:可靠性+事务+消息中间件+源码+日志
Kafka起初是由LinkedIn公司采用Scala语言开发的-一个多分区、多副本且基于ZooKeeper协调的分布式消息系统,现已被捐献给Apache基金会。目前Kafka已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。
|
2月前
|
消息中间件 存储 负载均衡
Kafka【付诸实践 01】生产者发送消息的过程描述及设计+创建生产者并发送消息(同步、异步)+自定义分区器+自定义序列化器+生产者其他属性说明(实例源码粘贴可用)【一篇学会使用Kafka生产者】
【2月更文挑战第21天】Kafka【付诸实践 01】生产者发送消息的过程描述及设计+创建生产者并发送消息(同步、异步)+自定义分区器+自定义序列化器+生产者其他属性说明(实例源码粘贴可用)【一篇学会使用Kafka生产者】
212 4
|
2月前
|
消息中间件 Java Kafka
Kafka【环境搭建 01】kafka_2.12-2.6.0 单机版安装+参数配置及说明+添加到service服务+开机启动配置+验证+chkconfig配置说明(一篇入门kafka)
【2月更文挑战第19天】Kafka【环境搭建 01】kafka_2.12-2.6.0 单机版安装+参数配置及说明+添加到service服务+开机启动配置+验证+chkconfig配置说明(一篇入门kafka)
62 1
|
2月前
|
消息中间件 存储 Kafka
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
53 1
|
2月前
|
消息中间件 网络协议 Kafka
Kafka【付诸实践 02】消费者和消费者群组+创建消费者实例+提交偏移量(自动、手动)+监听分区再平衡+独立的消费者+消费者其他属性说明(实例源码粘贴可用)【一篇学会使用Kafka消费者】
【2月更文挑战第21天】Kafka【付诸实践 02】消费者和消费者群组+创建消费者实例+提交偏移量(自动、手动)+监听分区再平衡+独立的消费者+消费者其他属性说明(实例源码粘贴可用)【一篇学会使用Kafka消费者】
90 3
|
2月前
|
消息中间件 存储 Kafka
Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
【2月更文挑战第19天】Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
140 1
|
5月前
|
消息中间件 缓存 Kafka
kafka源码解析——第一篇:producer
kafka源码解析——第一篇:producer
42 0
|
5月前
|
消息中间件 Java Shell
Linux【脚本 03】shell脚本离线安装配置集结JDK+InfluxDB+Zookeeper+Kafka(安装文件及脚本源码网盘分享)
Linux【脚本 03】shell脚本离线安装配置集结JDK+InfluxDB+Zookeeper+Kafka(安装文件及脚本源码网盘分享)
29 0
|
3月前
|
消息中间件 安全 Kafka
2024年了,如何更好的搭建Kafka集群?
我们基于Kraft模式和Docker Compose同时采用最新版Kafka v3.6.1来搭建集群。
484 2
2024年了,如何更好的搭建Kafka集群?
|
4月前
|
消息中间件 存储 数据可视化
kafka高可用集群搭建
kafka高可用集群搭建
49 0

热门文章

最新文章