Windows 下 Kafka 安装教程(保姆级)_windows安装kafka
一、准备工作
✅ 1. 安装 Java JDK(Kafka 依赖 Java 运行环境)
Kafka 是基于 Java 的,必须先安装 JDK。一般学到kafka的同学肯定已经安装好了JDK了,这一步我就不写了,具体可以参考其他文章。
⚠️ 注意:Kafka 3.9.0 要求本地必须安装 JDK 17 或以上版本。JDK 8 和 11 已不再被官方支持。
步骤:
-
访问官网下载 OpenJDK 或 Oracle JDK。
-
推荐版本:JDK 8 ~ JDK 17(Kafka 3.x 支持到 JDK 17)
Kafka需要的JDK版本! -
安装完成后设置环境变量:
-
JAVA_HOME
:指向 JDK 安装目录,例如C:\\Program Files\\Java\\jdk-17.0.1
-
Path
中添加%JAVA_HOME%\\bin
-
验证是否安装成功:
java -versionjavac -version
二、下载 Kafka
访问 Apache Kafka 官网下载页面:
🔗 https://kafka.apache.org/downloads
选择最新的稳定版本,例如:
Latest release: kafka_2.13-3.9.0.tgz
Windows 用户选择 kafka_2.13-3.9.0.tgz
即可,Scala 版本不影响你在 Windows 上运行 Kafka。除非你自己用 Scala 编写客户端程序,否则任意版本都可以。社区推荐使用 2.13,因此建议你就选这个版本。
✅ 注意:Windows 上使用的是 Kafka 自带的
windows
脚本,不需要 Linux 工具支持。
三、解压 Kafka
虽然 Kafka 是为 Linux 设计的,但官方提供了部分 Windows 兼容脚本(位于 bin/windows/
目录下),所以你可以放心地:
- 使用
zookeeper-server-start.bat
- 使用
kafka-server-start.bat
- 创建 Topic、发送和消费消息等操作都正常运行
只是要注意以下几点:
F:\\kafka_2.13-3.9.0
logs/
目录下log.dirs
中使用多个磁盘路径(Windows 下可能出错)Kafka配置(kafka-logs的新建必要!!)
这个文件主要是存放分区的offerset,元文件,记录消费到哪里等等。
第一步:一定要需要建立一个空文件夹kafka-logs在bin、config同级!!
F:\\kafka_2.13-3.9.0\\├── bin/├── config/├── logs/└── kafka-logs/ ← 新建这个文件夹
第二步:编辑\\kafka_2.13-3.9.0\\config下的server.properties文件
log.dirs=/kafka-logs
除了 log.dirs
,还有几个常用配置项也建议了解一下,其他改不改不影响基本使用:
broker.id
listeners
num.partitions
log.retention.hours
log.segment.bytes
message.max.bytes
完整配置样例(适合 Windows 单节点开发,不必要,默认也可)
broker.id=0listeners=PLAINTEXT://:9092advertised.listeners=PLAINTEXT://localhost:9092log.dirs=F:/kafka_2.13-3.9.0/kafka-logsnum.partitions=1log.retention.hours=168log.segment.bytes=1073741824message.max.bytes=10485880replica.lag.time.ms=10000offsets.topic.replication.factor=1transaction.state.log.replication.factor=1transaction.state.log.min.isr=1
四、启动 Kafka与关闭Kafka(比较麻烦,需要打开多窗口执行)
✅ 1. 启动 ZooKeeper
Kafka 依赖 ZooKeeper 存储元数据信息。
打开 CMD,进入 Kafka 目录:
cd F:\\kafka_2.13-3.9.0
执行以下命令启动 ZooKeeper:
.\\bin\\windows\\zookeeper-server-start.bat .\\config\\zookeeper.properties
✅ 成功标志:看到类似 INFO ... Starting zookeeper version...
的日志输出。
✅ 2. 启动 Kafka
保持上一个窗口不要关闭,再打开一个新的 CMD 窗口,同样进入 Kafka 目录:
执行:
.\\bin\\windows\\kafka-server-start.bat .\\config\\server.properties
✅ 成功标志:看到 INFO [KafkaServer id=0] started (kafka.server.KafkaServer)

✅ 步骤 3:关闭 Kafka
进入 Kafka 目录:
.\\bin\\windows\\kafka-server-stop.bat
你会看到 Kafka 开始安全退出,等待几秒后自动结束。
✅ 步骤 4:关闭 ZooKeeper
继续在当前 CMD 窗口中执行:
.\\bin\\windows\\zookeeper-server-stop.bat
ZooKeeper 也会优雅退出。
五、创建 Topic
新打开一个 CMD 窗口,创建一个测试用的 Topic:
.\\bin\\windows\\kafka-topics.bat --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
参数说明:
-
--topic
:Topic 名称 -
--partitions
:分区数 -
--replication-factor
:副本数(本地开发设为 1 即可)
查看已创建的 Topic:
.\\bin\\windows\\kafka-topics.bat --list --bootstrap-server localhost:9092
六、发送消息(Producer)
打开一个新 CMD 窗口,运行生产者控制台:
.\\bin\\windows\\kafka-console-producer.bat --topic test-topic --bootstrap-server localhost:9092
输入任意文字后按回车即可发送消息,比如:
Hello Kafka!This is a test message.
七、消费消息(Consumer)
再新开一个 CMD 窗口,运行消费者控制台:
.\\bin\\windows\\kafka-console-consumer.bat --topic test-topic --from-beginning --bootstrap-server localhost:9092
你会看到刚刚发送的消息被打印出来!
八、Windows 下如何正确启动和关闭 Kafka?
⚠️ 不要直接关闭 CMD 窗口也不要ctrl + c,都是强制关机!再次启动可能会有很多bug!
一定要使用官方的启动和关闭脚本!!!bug血泪!
因为:
Ctrl + C
是发送SIGINT
信号,Kafka 和 ZooKeeper 会尝试优雅关闭,但不一定能完成全部清理工作-
如果用户误操作、窗口被意外关闭、或脚本中断,会导致:
-
.lock
文件残留 -
controller.log
重命名失败 -
ZooKeeper 节点未清除
-
Kafka Broker 状态未更新
-
九、推荐脚本(自动化启停)
为了方便你以后快速操作,我为你写好了两个批处理脚本:
放在同级目录下即可!
✅ 启动脚本:start-kafka.bat
@echo offchcp 65001 > nulTITLE Kafka 启动器 - kafka_2.13-3.9.0SETLOCALset KAFKA_HOME=F:\\kafka_2.13-3.9.0if not exist \"%KAFKA_HOME%\" ( echo ❌ 错误:KAFKA_HOME 路径不存在: %KAFKA_HOME% pause exit /b 1)cd /d %KAFKA_HOME%:: 清理锁文件(防止上次异常退出导致冲突)if exist \"logs\\*.lock\" del /Q \"logs\\*.lock\"if exist \"logs\\*.pid\" del /Q \"logs\\*.pid\":: 启动 ZooKeeperecho ▶️ 正在启动 ZooKeeper...start \"ZooKeeper\" /D \"%KAFKA_HOME%\" call bin\\windows\\zookeeper-server-start.bat config\\zookeeper.properties:: 等待初始化完成timeout /t 7 > NUL:: 启动 Kafkaecho ▶️ 正在启动 Kafka Server...call bin\\windows\\kafka-server-start.bat config\\server.propertiesecho ✅ Kafka 已成功启动!pause
✅ 关闭脚本:stop-kafka.bat
@echo offchcp 65001 > nulTITLE Kafka 关闭器 - kafka_2.13-3.9.0SETLOCALset KAFKA_HOME=F:\\kafka_2.13-3.9.0if not exist \"%KAFKA_HOME%\" ( echo ❌ 错误:KAFKA_HOME 路径不存在: %KAFKA_HOME% pause exit /b 1)cd /d %KAFKA_HOME%:: 停止 Kafkaecho ⏹️ 正在尝试优雅地停止 Kafka...call \"%KAFKA_HOME%\\bin\\windows\\kafka-server-stop.bat\":: 等待 Kafka 进程结束call :wait_for_process_exit \"kafka\" 30if errorlevel 1 ( echo ⚠️ Kafka 进程未能在指定时间内退出,请检查日志或手动终止。):: 停止 ZooKeeperecho ⏹️ 正在尝试优雅地停止 ZooKeeper...call \"%KAFKA_HOME%\\bin\\windows\\zookeeper-server-stop.bat\":: 等待 ZooKeeper 进程结束call :wait_for_process_exit \"zookeeper\" 30if errorlevel 1 ( echo ⚠️ ZooKeeper 进程未能在指定时间内退出,请检查日志或手动终止。)echo ✅ Kafka 和 ZooKeeper 已尝试优雅关闭。pauseexit /b 0:: ============ 函数区 ============:: 等待指定关键字的 Java 进程退出:wait_for_process_exitsetlocalset keyword=%~1set timeout=%~2set count=0echo 🔍 正在等待 [%keyword%] 进程退出,最多等待 %timeout% 秒...:looptasklist | findstr /i java >nul && ( tasklist | findstr /i %keyword% >nul && ( if %count% lss %timeout% ( timeout /t 1 >nul set /a count+=1 goto loop ) else ( endlocal exit /b 1 ) ))endlocalexit /b 0

十、常见问题与解决方案
Address already in use
stop-kafka.bat
关闭服务,或重启电脑Node does not exist
Class \'kafka.Kafka\' could not be found
JAVA_HOME
是否设置正确找不到或无法加载主类