一、准备工作

✅ 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 -version

javac -version

运行本项目

bash



二、下载 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/ 目录下

性能略差于 Linux 本地开发没问题,生产建议用 Linux

不支持某些高级功能 如 log.dirs 中使用多个磁盘路径(Windows 下可能出错)

Kafka配置(kafka-logs的新建必要!!)

这个文件主要是存放分区的offerset,元文件,记录消费到哪里等等。


类型 存放内容

Topic 数据 每个 Topic 的分区数据都存在这里

Offset 信息 记录消费者组消费到的位置

元数据 分区状态、ISR(In-Sync Replicas)等

日志文件 controller.log、kafka-request.log 等

第一步:一定要需要建立一个空文件夹kafka-logs在bin、config同级!!


F:\kafka_2.13-3.9.0\

├── bin/

├── config/

├── logs/

└── kafka-logs/    ← 新建这个文件夹

运行本项目

bash



第二步:编辑\kafka_2.13-3.9.0\config下的server.properties文件


log.dirs=/kafka-logs

运行本项目

bash

除了 log.dirs,还有几个常用配置项也建议了解一下,其他改不改不影响基本使用:


配置项 默认值 说明

broker.id 0 Kafka 实例的唯一 ID,单机版保持默认即可

listeners PLAINTEXT://:9092 Kafka 监听地址,默认本地访问

num.partitions 1 默认每个 topic 创建的分区数

log.retention.hours 168 (7天) 消息保留时间

log.segment.bytes 1GB 单个日志文件大小上限

message.max.bytes 1MB 最大消息体大小(生产环境可调大)

完整配置样例(适合 Windows 单节点开发,不必要,默认也可)

broker.id=0

listeners=PLAINTEXT://:9092

advertised.listeners=PLAINTEXT://localhost:9092

log.dirs=F:/kafka_2.13-3.9.0/kafka-logs

num.partitions=1

log.retention.hours=168

log.segment.bytes=1073741824

message.max.bytes=10485880

replica.lag.time.ms=10000

offsets.topic.replication.factor=1

transaction.state.log.replication.factor=1

transaction.state.log.min.isr=1

运行本项目

bash


四、启动 Kafka与关闭Kafka(比较麻烦,需要打开多窗口执行)

✅ 1. 启动 ZooKeeper

Kafka 依赖 ZooKeeper 存储元数据信息。


打开 CMD,进入 Kafka 目录:


cd F:\kafka_2.13-3.9.0

运行本项目

bash

执行以下命令启动 ZooKeeper:


.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties

运行本项目

bash

✅ 成功标志:看到类似 INFO … Starting zookeeper version… 的日志输出。


✅ 2. 启动 Kafka

保持上一个窗口不要关闭,再打开一个新的 CMD 窗口,同样进入 Kafka 目录:


执行:


.\bin\windows\kafka-server-start.bat .\config\server.properties

运行本项目

bash

✅ 成功标志:看到 INFO [KafkaServer id=0] started (kafka.server.KafkaServer)



成功启动kafka图

✅ 步骤 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

运行本项目

bash

参数说明:


–topic:Topic 名称


–partitions:分区数


–replication-factor:副本数(本地开发设为 1 即可)


查看已创建的 Topic:


.\bin\windows\kafka-topics.bat –list –bootstrap-server localhost:9092

运行本项目

bash

六、发送消息(Producer)

打开一个新 CMD 窗口,运行生产者控制台:


.\bin\windows\kafka-console-producer.bat –topic test-topic –bootstrap-server localhost:9092

运行本项目

bash

输入任意文字后按回车即可发送消息,比如:


Hello Kafka!

This is a test message.

运行本项目

bash

七、消费消息(Consumer)

再新开一个 CMD 窗口,运行消费者控制台:


.\bin\windows\kafka-console-consumer.bat –topic test-topic –from-beginning –bootstrap-server localhost:9092

运行本项目

bash

你会看到刚刚发送的消息被打印出来!


八、Windows 下如何正确启动和关闭 Kafka?

⚠️ 不要直接关闭 CMD 窗口也不要ctrl + c,都是强制关机!再次启动可能会有很多bug!


一定要使用官方的启动和关闭脚本!!!bug血泪!


因为:


Ctrl + C 是发送 SIGINT 信号,Kafka 和 ZooKeeper 会尝试优雅关闭,但不一定能完成全部清理工作

如果用户误操作、窗口被意外关闭、或脚本中断,会导致:


.lock 文件残留


controller.log 重命名失败


ZooKeeper 节点未清除


Kafka Broker 状态未更新


九、推荐脚本(自动化启停)

为了方便你以后快速操作,我为你写好了两个批处理脚本:


放在同级目录下即可!




✅ 启动脚本:start-kafka.bat

@echo off

chcp 65001 > nul

TITLE Kafka 启动器 – kafka_2.13-3.9.0

SETLOCAL

set KAFKA_HOME=F:\kafka_2.13-3.9.0

if 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"

:: 启动 ZooKeeper

echo ▶️ 正在启动 ZooKeeper…

start "ZooKeeper" /D "%KAFKA_HOME%" call bin\windows\zookeeper-server-start.bat config\zookeeper.properties

:: 等待初始化完成

timeout /t 7 > NUL

:: 启动 Kafka

echo ▶️ 正在启动 Kafka Server…

call bin\windows\kafka-server-start.bat config\server.properties

echo ✅ Kafka 已成功启动!

pause

运行本项目

bash


✅ 关闭脚本:stop-kafka.bat

@echo off

chcp 65001 > nul

TITLE Kafka 关闭器 – kafka_2.13-3.9.0

SETLOCAL

set KAFKA_HOME=F:\kafka_2.13-3.9.0

if not exist "%KAFKA_HOME%" (

    echo ❌ 错误:KAFKA_HOME 路径不存在: %KAFKA_HOME%

    pause

    exit /b 1

)

cd /d %KAFKA_HOME%

:: 停止 Kafka

echo ⏹️ 正在尝试优雅地停止 Kafka…

call "%KAFKA_HOME%\bin\windows\kafka-server-stop.bat"

:: 等待 Kafka 进程结束

call :wait_for_process_exit "kafka" 30

if errorlevel 1 (

    echo ⚠️ Kafka 进程未能在指定时间内退出,请检查日志或手动终止。

)

:: 停止 ZooKeeper

echo ⏹️ 正在尝试优雅地停止 ZooKeeper…

call "%KAFKA_HOME%\bin\windows\zookeeper-server-stop.bat"

:: 等待 ZooKeeper 进程结束

call :wait_for_process_exit "zookeeper" 30

if errorlevel 1 (

    echo ⚠️ ZooKeeper 进程未能在指定时间内退出,请检查日志或手动终止。

)

echo ✅ Kafka 和 ZooKeeper 已尝试优雅关闭。

pause

exit /b 0

:: ============ 函数区 ============

:: 等待指定关键字的 Java 进程退出

:wait_for_process_exit

setlocal

set keyword=%~1

set timeout=%~2

set count=0

echo 🔍 正在等待 [%keyword%] 进程退出,最多等待 %timeout% 秒…

:loop

tasklist | 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

        )

    )

)

endlocal

exit /b 0

运行本项目

bash



优雅地关闭Kafka

十、常见问题与解决方案

问题 可能原因 解决方案

Address already in use 上次未正常关闭 Kafka 或 ZooKeeper 使用 stop-kafka.bat 关闭服务,或重启电脑

Node does not exist ZooKeeper 没有正确启动 确保 ZooKeeper 启动后再启动 Kafka

Class 'kafka.Kafka' could not be found 路径错误或 JDK 版本不对 检查 JAVA_HOME 是否设置正确

找不到或无法加载主类 Kafka 路径包含中文或空格 将 Kafka 安装到英文路径下


————————————————

版权声明:本文为CSDN博主「Lfqq」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/KeyandL/article/details/148518493