【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 manifest
classpath 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