【Kafka】Windows+KRaft部署指南
- 摘要
- 本地环境说明
- 官网
- 快速开始
- 修改config/kraft/server.properties
- 初始化数据存储目录
- 启动
- 测试
- 创建topic
- 创建生产者
- 创建消费者
- FAQ
- 输入行太长。命令语法不正确。
- 问题描述
- 解决方案
- 参考资料
摘要
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。其核心组件包含Producer、Broker、Consumer,以及依赖的Zookeeper集群。其中Zookeeper集群是Kafka用来负责集群元数据的管理、控制器的选举等。
用过kafka的开发者应该知道,每次启动kafka服务时,都是需要先把Zookeeper启动,然后启动kafka,步骤相当繁琐。
Kafka在使用的过程当中,会出现一些问题。由于重度依赖Zookeeper集群,当Zookeeper集群性能发生抖动时,Kafka的性能也会收到很大的影响。因此,在Kafka发展的过程当中,为了解决这个问题,提供KRaft模式3.0+版本,来取消Kafka对Zookeeper的依赖。
Kafka是依赖于JDK的,需要先把java环境配置一下。
本地环境说明
| 依赖 | 版本 |
|---|---|
| JDK | 21 |
| Windows | 11 |
| Kafka | 3.9.0 |
官网
- 下载页面:
https://kafka.apache.org/downloads

3.9.0下载地址:https://downloads.apache.org/kafka/3.9.0/kafka_2.13-3.9.0.tgz
快速开始
修改config/kraft/server.properties
# 表示此节点,既是broker又可以当controller
process.roles=broker,controller
# 节点id,不重名即可
node.id=1
# controller竞争者,也就是controller将从它们之中诞生(这里的kafka1是刚刚设置的本机的域名解析,或者直接写localhost也行)
controller.quorum.voters=1@localhost:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
# 监听地址(也就是客户端连接时访问的地址)
advertised.listeners=PLAINTEXT://localhost:9092
controller.listener.names=CONTROLLER
# kafka数据存放地址
log.dirs=data
初始化数据存储目录
# 生成一个uuid,后面需要用
.\bin\windows\kafka-storage random-uuid
# 示例如下:
yc9oGK5tQhakA90-ODilCA# 格式化存储
.\bin\windows\kafka-storage format -t yc9oGK5tQhakA90-ODilCA -c ./config/kraft/server.properties
启动
# 格式化完毕后,可以启动节点了(守护进程启动加-daemon 参数)。
.\bin\windows\kafka-server-start ./config/kraft/server.properties
测试
创建topic
kafka-topics --create --topic kafka-test --partitions 1 --replication-factor 1 --bootstrap-server 127.0.0.1:9092
创建生产者
kafka-console-producer --bootstrap-server 127.0.0.1:9092 --topic kafka-test

创建消费者
kafka-console-consumer --bootstrap-server 127.0.0.1:9092 --topic kafka-test

FAQ
输入行太长。命令语法不正确。
问题描述
在 Windows 下运行 Kafka 时有可能报错输入行太长。命令语法不正确。出现这个问题的原因是 Windows 命令长度最长支持 8192 个字符,Kafka 的启动脚本中有命令拼接 classpath 变量,classpath 的内容是每个 jar 包的绝对路径拼接的字符串。当 Kafka 的位置比较深,也就是目录比较长的时候,classpath 的长度就会超长。之前版本的 Kafka 没有问题是因为新版本的 Kafka 的 libs 目录下的 jar 包数量增加了,也就是说之前版本也是存在这个隐患的。
解决方案
既然知道了是 classpath 过长引起的,那么缩短其长度就可以了。
在使用 IDEA 开发时已经遇到过这种情况了,IDEA 给出了三个方案:
JAR manifestclasspath file@argfile(Java 9+)
由于 Kafka 的位置是不固定,所以需要动态生成 classpath,所以选择了 @argfile 方案。
- 指定
classpath时直接指定文件夹,kafka-run-class.bat需要做以下修改: - 注释或删除
93 ~ 95行,这三行的作用是拼接classpath - 注释或删除
174 ~ 177行,这四行的作用是判断classpath是否定义,如果未定义则退出。因为要直接指定目录了,所以不需要classpath了。 - 修改
179行,将%CLASSPATH%替换成%BASE_DIR%\libs\*这一行不能注释,因为注释还是会报
输入行太长
参考资料
- KRaft单机、集群部署Kafka
