目录
环境安装
作为一款开源分布式事件流处理平台,Kafka的分布式软件环境安装相对复杂,这不利于初学者的学习和练习。因此,我们首先搭建一个简单的Windows单机环境,以便初学者能够快速掌握Kafka的基本原理和用法。在后续博客中,我们将深入学习Kafka在生产环境中的安装和使用。
安装Java8(略)
当前Java软件开发的主流版本是Java 8,而Kafka 3.x官方建议使用Java 11,但Java 8仍然适用。未来Kafka 4.x版本将会完全弃用Java 8。鉴于我们当前学习的是Kafka 3.6.1版本,因此使用Java 8即可,无需升级。由于Kafka的绝大多数代码都是用Scala编写,并且Scala基于Java开发,Kafka可以在JVM上直接运行,因此无需安装其他软件。假设您已经安装了Java 8并配置了基本的环境变量,故此处安装过程省略。
安装Kafka
-
下载软件安装包:
kafka_2.12-3.6.1.tgz
,下载地址:Apache Kafka- 3.6.1 是 Kafka 软件的版本,截至2023年12月24日,Kafka 最新版本为3.6.1。
- 2.12 是对应的 Scala 开发语言版本,Scala 2.12 与 Java 8 兼容,可以直接使用。
tgz
是 Linux 系统中常见的压缩文件格式,类似于 Windows 系统中的zip
和rar
格式,在 Windows 环境中可以直接使用压缩工具进行解压缩。
-
解压文件:
kafka_2.12-3.6.1.tgz
,解压目录为非系统盘的根目录,例如E:/
为了访问方便,可以将解压后的文件目录改为 kafka
,更改后的文件目录结构如下:
bin/
├── linux
│ └── (Linux 系统下可执行脚本文件)
├── windows
│ └── (Windows 系统下可执行脚本文件)
config/
├── (配置文件)
libs/
├── (依赖类库)
licenses/
├── (许可信息)
site-docs/
├── (文档)
logs/
└── (服务日志)
启动ZooKeeper
当前版本的 Kafka 仍依赖 ZooKeeper 进行多节点协调调度,因此启动 Kafka 之前需先启动 ZooKeeper。但 Kafka 内置了 ZooKeeper,无需额外安装,直接调用脚本命令启动即可。
-
进入 Kafka 解压缩文件夹的
config
目录,修改zookeeper.properties
配置文件:bash# the directory where the snapshot is stored. # 修改 dataDir 配置,用于设置 ZooKeeper 数据存储位置,该路径如果不存在会自动创建。 dataDir=E:/kafka_2.12-3.6.1/data/zk
-
打开 DOS 窗口,进入
E:/kafka_2.12-3.6.1/bin/windows
目录。 -
因为本章节演示的是 Windows 环境下 Kafka 的安装和使用,所以启动 ZooKeeper 软件的指令为 Windows 环境下的
.bat
批处理文件。调用启动指令时,需要传递配置文件的路径:bash# 因为当前目录为 windows,所以需要通过相对路径找到 zookeeper 的配置文件。 zookeeper-server-start.bat ../../config/zookeeper.properties
-
出现如下界面,ZooKeeper 启动成功。
-
为了操作方便,也可以在 Kafka 解压缩后的目录中创建脚本文件
zk.cmd
:bash# 调用启动命令,且同时指定配置文件。 call bin/windows/zookeeper-server-start.bat config/zookeeper.properties
启动Kafka
-
进入 Kafka 解压缩文件夹的
config
目录,修改server.properties
配置文件:# Listener name, hostname and port the broker will advertise to clients. # If not set, it uses the value for "listeners". # 客户端访问 Kafka 服务器时,默认连接的服务为本机的端口 9092,如果想要改变,可以修改如下配置 # 此处我们不做任何改变,默认即可 #advertised.listeners=PLAINTEXT://your.host.name:9092 # A comma separated list of directories under which to store log files # 配置 Kafka 数据的存放位置,如果文件目录不存在,会自动生成。 log.dirs=E:/kafka_2.12-3.6.1/data/kafka
-
打开 DOS 窗口,进入
E:/kafka_2.12-3.6.1/bin/windows
目录。 -
调用启动指令,传递配置文件的路径:
# 因为当前目录为 windows,所以需要通过相对路径找到 kafka 的配置文件。 kafka-server-start.bat ../../config/server.properties
-
出现如下界面,Kafka 启动成功。
-
为了操作方便,也可以在 Kafka 解压缩后的目录中创建脚本文件
kfk.cmd
:# 调用启动命令,且同时指定配置文件。 call bin/windows/kafka-server-start.bat config/server.properties
-
在 DOS 窗口中输入
jps
指令,查看当前启动的软件进程:这里名称为 QuorumPeerMain 的就是 ZooKeeper 软件进程,名称为 Kafka 的就是 Kafka 系统进程。此时,说明 Kafka 已经可以正常使用了。
消息主题
在消息发布/订阅(Publish/Subscribe)模型中,为了可以让消费者对感兴趣的消息进行消费,而不是对所有数据进行消费,定义了主题(Topic)的概念。即将不同的消息进行分类,分成不同的主题(Topic),然后消息生产者在生成消息时,会向指定的主题(Topic)中发送,而消息消费者也可以订阅自己感兴趣的主题(Topic)并从中获取消息。
有很多方式可以操作 Kafka 消息中的主题(Topic):命令行、第三方工具、Java API、自动创建。对于初学者而言,掌握基本的命令行操作是必要的。因此,接下来我们采用命令行进行操作。
创建主题
-
启动 ZooKeeper,Kafka 服务进程(略)
-
打开 DOS 窗口,进入
E:/kafka_2.12-3.6.1/bin/windows
目录。 -
DOS 窗口输入指令,创建主题:
# Kafka 是通过 kafka-topics.bat 指令文件进行消息主题操作的。其中包含了对主题的查询、创建、删除等功能。 # --bootstrap-server : 把当前的 DOS 窗口当成 Kafka 的客户端,那么进行操作前,就需要连接服务器,这里的参数表示服务器的连接方式,因为我们在本机启动 Kafka 服务进程,且 Kafka 默认端口为 9092,所以此处,后面接的参数值为 localhost:9092,用空格隔开。 # --create : 表示对主题的创建操作,是个操作参数,后面无需增加参数值。 # --topic : 主题的名称,后面接的参数值一般就是见名知意的字符串名称,类似于 Java 中的字符串类型标识符名称,当然也可以使用数字,只不过最后还是当成数字字符串使用。 # 指令 kafka-topics.bat --bootstrap-server localhost:9092 --create --topic test
查询主题
-
DOS 窗口输入指令,查看所有主题:
# Kafka 是通过 kafka-topics.bat 文件进行消息主题操作的。其中包含了对主题的查询、创建、删除等功能。 # --bootstrap-server : 把当前的 DOS 窗口当成 Kafka 的客户端,那么进行操作前,就需要连接服务器,这里的参数表示服务器的连接方式,因为我们在本机启动 Kafka 服务进程,且 Kafka 默认端口为 9092,所以此处,后面接的参数值为 localhost:9092,用空格隔开。 # --list : 表示对所有主题的查询操作,是个操作参数,后面无需增加参数值。 # 指令 kafka-topics.bat --bootstrap-server localhost:9092 --list
-
DOS 窗口输入指令,查看指定主题信息:
# --bootstrap-server : 把当前的 DOS 窗口当成 Kafka 的客户端,那么进行操作前,就需要连接服务器,这里的参数表示服务器的连接方式,因为我们在本机启动 Kafka 服务进程,且 Kafka 默认端口为 9092,所以此处,后面接的参数值为 localhost:9092,用空格隔开。 # --describe : 查看主题的详细信息。 # --topic : 查询的主题名称。 # 指令 kafka-topics.bat --bootstrap-server localhost:9092 --describe --topic test
修改主题
创建主题后,可能需要对某些参数进行修改,那么就需要使用指令进行操作。
-
DOS 窗口输入指令,修改指定主题的参数:
# Kafka 是通过 kafka-topics.bat 文件进行消息主题操作的。其中包含了对主题的查询、创建、删除等功能。 # --bootstrap-server : 把当前的 DOS 窗口当成 Kafka 的客户端,那么进行操作前,就需要连接服务器,这里的参数表示服务器的连接方式,因为我们在本机启动 Kafka 服务进程,且 Kafka 默认端口为 9092,所以此处,后面接的参数值为 localhost:9092,用空格隔开。 # --alter : 表示对主题的修改操作,是个操作参数,后面无需增加参数值。 # --topic : 修改的主题名称。 # --partitions : 修改的配置参数:分区数量。 # 指令 kafka-topics.bat --bootstrap-server localhost:9092 --topic test --alter --partitions 2
删除主题
如果主题创建后不再需要,或创建的主题有问题,可以通过相应的指令删除主题。
-
DOS 窗口输入指令,删除指定名称的主题:
# Kafka 是通过 kafka-topics.bat 文件进行消息主题操作的。其中包含了对主题的查询、创建、删除等功能。 # --bootstrap-server : 把当前的 DOS 窗口当成 Kafka 的客户端,那么进行操作前,就需要连接服务器,这里的参数表示服务器的连接方式,因为我们在本机启动 Kafka 服务进程,且 Kafka 默认端口为 9092,所以此处,后面接的参数值为 localhost:9092,用空格隔开。 # --delete : 表示对主题的删除操作,是个操作参数,后面无需增加参数值。默认情况下,删除操作是逻辑删除,也就是说数据存储的文件依然存在,但是通过指令查询不出来。如果想要直接删除,需要在 server.properties 文件中设置参数 delete.topic.enable=true。 # --topic : 删除的主题名称。 # 指令 kafka-topics.bat --bootstrap-server localhost:9092 --topic test --delete