中间件总结 - 消息队列 - Windows 上安装 Apache Kafka 3.9.1 Kraft 模式

中间件总结 - 消息队列 - Windows 上安装 Apache Kafka 3.9.1 Kraft 模式

不废话,直接开干


Windows 上安装 Apache Kafka 3.9.1 Kraft 模式 - 带详细注释

第一部分:环境准备

1.1 下载正确的 Kafka 版本(编译版本)

# 初学者应该下载二进制版本,不是源代码版本
# 下载: kafka_2.13-3.9.1.tgz (Scala 2.13 版本)
# 下载地址: https://kafka.apache.org/downloads

1.2 安装 Java

# 检查 Java 是否安装
java -version

# Kafka 3.9.1 支持 Java 8, 11, 17, 21
# 推荐使用 Java 17 (最稳定)

1.3 解压和目录结构

C:\kafka_2.13-3.9.1\
├── bin/           # 执行脚本
│   └── windows/   # Windows 专用脚本
├── config/        # 配置文件
│   └── kraft/     # Kraft 模式专用配置
├── libs/          # 依赖的库文件
└── logs/          # 日志目录(稍后创建)

第二部分:详细安装步骤

2.1 设置环境变量

@echo off
:: =============================================
:: 环境变量设置(临时,只在当前命令行有效)
:: =============================================

:: KAFKA_HOME: 指向 Kafka 安装目录
set KAFKA_HOME=C:\kafka_2.13-3.9.1

:: 将 Kafka 的 bin 目录添加到 PATH,这样可以直接运行 kafka-*.bat 命令
set PATH=%KAFKA_HOME%\bin\windows;%PATH%

:: 切换到 Kafka 目录
cd /d %KAFKA_HOME%

echo 环境变量设置完成!

2.2 生成集群 ID

@echo off
:: =============================================
:: 生成 Kafka 集群的唯一标识符
:: =============================================
:: 每个 Kafka 集群都需要一个唯一的集群ID
:: 这个ID用于区分不同的Kafka集群

echo 正在生成集群ID...
kafka-storage.bat random-uuid

:: 输出示例: 5J7j4XyXTmyuNh6RkrzKgQ
:: 复制这个ID,稍后配置会用到
pause

2.3 详细配置说明

创建 config/kraft/server.properties 文件,以下是逐行详细注释:

##################################################
# Kafka Kraft 模式核心配置 - 详细注释版
##################################################

# ======================== 节点角色配置 ========================
# process.roles: 定义此节点的角色
#   broker   - 消息代理,处理生产/消费请求
#   controller - 集群控制器,管理元数据和领导选举
# 在Kraft模式下,节点可以同时担任两种角色(测试单机环境可配置在一起)
process.roles=broker,controller

# node.id: 节点的唯一标识符
#   - 必须在集群中唯一
#   - 推荐从1开始编号
node.id=1


# ======================== 集群投票者配置 ========================
# controller.quorum.voters: 定义控制器集群的成员
# 格式:nodeid@host:port,nodeid@host:port,...
# 说明:这里配置的是节点ID@地址:端口,不是集群ID!
# 格式: nodeid1@host1:port1,nodeid2@host2:port2,...
# 这里我们使用单个节点: 节点1监听localhost的9093端口
controller.quorum.voters=1@localhost:9093


# ======================== 网络监听配置 ========================
# listeners: 定义Kafka监听的网络接口和协议
#   PLAINTEXT://:9092    - 客户端连接端口(生产/消费)
#   CONTROLLER://:9093   - 控制器间通信端口
listeners=PLAINTEXT://:9092,CONTROLLER://:9093

# advertised.listeners: 对外公告的地址
#   客户端实际连接时使用的地址
#   在生产环境中应该设置为服务器的真实IP或域名
advertised.listeners=PLAINTEXT://localhost:9092


# ======================== 数据存储配置 ========================
# log.dirs: Kafka数据日志的存储目录
#   - 可以配置多个目录用逗号分隔
#   - 数据包括消息、偏移量、主题配置等
log.dirs=C:/kafka_2.13-3.9.1/logs


# ======================== 控制器专用配置 ========================
# controller.listener.names: 控制器监听器名称
#   指定哪个监听器用于控制器通信
controller.listener.names=CONTROLLER


# ======================== Broker 通信配置 ========================
# inter.broker.listener.name: Broker间通信使用的监听器
#   在多个Broker的集群中,它们之间使用这个监听器通信
inter.broker.listener.name=PLAINTEXT


# ======================== 日志保留策略 ========================
# log.retention.hours: 消息保留时间(小时)
#   超过这个时间的消息会被自动删除
log.retention.hours=168

# log.retention.bytes: 每个分区的最大容量(字节)
#   超过这个大小会删除旧消息
# log.retention.bytes=-1

# log.segment.bytes: 日志段文件大小
#   每个日志文件的最大大小,达到后会创建新文件
log.segment.bytes=1073741824


# ======================== 主题默认配置 ========================
# num.partitions: 创建主题时的默认分区数
#   分区数影响并行处理能力
num.partitions=1

# default.replication.factor: 默认副本因子
#   在集群中每个分区的副本数量
default.replication.factor=1


# ======================== 网络和安全配置 ========================
# socket.send.buffer.bytes: 网络发送缓冲区大小
socket.send.buffer.bytes=102400

# socket.receive.buffer.bytes: 网络接收缓冲区大小
socket.receive.buffer.bytes=102400

# socket.request.max.bytes: 最大请求大小
socket.request.max.bytes=104857600


# ======================== 杂项配置 ========================
# auto.create.topics.enable: 是否自动创建主题
#   当生产或消费不存在的主题时自动创建
auto.create.topics.enable=true

# num.***work.threads: 网络线程数,处理网络请求
num.***work.threads=3

# num.io.threads: I/O线程数,处理磁盘IO
num.io.threads=8

注意:上述日志目录自行指定,后续安装过程如果出现问题,可以尝试把logs中文件清除后试一下

2.4 格式化存储目录

@echo off
:: =============================================
:: 格式化Kafka存储目录
:: =============================================
:: 这个步骤会:
:: 1. 初始化数据目录结构
:: 2. 写入集群元数据
:: 3. 准备Kafka启动所需文件

echo 正在格式化Kafka存储目录...

:: 使用之前生成的集群ID替换 YOUR_CLUSTER_ID
kafka-storage.bat format ^
  --cluster-id 5J7j4XyXTmyuKgQ ^
  --config .\config\kraft\server.properties

if %errorlevel% == 0 (
    echo ✅ 存储格式化成功!
) else (
    echo ❌ 存储格式化失败!
    pause
    exit /b 1
)

2.5 启动 Kafka 服务

@echo off
:: =============================================
:: 启动Kafka服务
:: =============================================
:: 这个命令会:
:: 1. 启动Kafka broker
:: 2. 启动Kafka controller  
:: 3. 开始监听客户端连接

echo 正在启动Kafka服务(Kraft模式)...
echo 监听端口: 9092 (客户端), 9093 (控制器)
echo 数据目录: C:\kafka_2.13-3.9.1\logs
echo.
echo 如果启动成功,你会看到Kafka的日志输出...
echo 按 Ctrl+C 停止服务
echo.

:: 启动Kafka服务器
kafka-server-start.bat .\config\kraft\server.properties
问题1
  • 提示Kafka Wmic不是内部或外部命令。
  • wmic从Windows10 21H1开始已弃用(windows服务中开启也不行)。因此直接修改kafka-server-start.bat文件
  • 最终解决办法

第三部分:测试和验证

3.1 创建测试脚本 test-kafka.bat

@echo off
setlocal

set KAFKA_HOME=C:\kafka_2.13-3.9.1
set BROKER=localhost:9092

echo ========================================
echo    Kafka 3.9.1 功能测试脚本
echo ========================================

echo 步骤1: 创建测试主题...
kafka-topics.bat --create ^
  --topic test-topic ^
  --bootstrap-server %BROKER% ^
  --partitions 1 ^
  --replication-factor 1

echo.
echo 步骤2: 列出所有主题...
kafka-topics.bat --list --bootstrap-server %BROKER%

echo.
echo 步骤3: 查看主题详情...
kafka-topics.bat --describe --topic test-topic --bootstrap-server %BROKER%

echo.
echo ========================================
echo    测试完成!
echo ========================================
echo 接下来你可以:
echo 1. 生产消息: kafka-console-producer.bat --topic test-topic --bootstrap-server %BROKER%
echo 2. 消费消息: kafka-console-consumer.bat --topic test-topic --from-beginning --bootstrap-server %BROKER%
echo.
pause
问题1
  • 双击执行,闪退(网上说加pause 和 将bat文件拖拽到打开的cmd窗口也不行)
  • 解决办法 在每条命令前加call

为什么需要 call?

在Windows批处理中:
直接执行: script.bat - 控制权会转移到新脚本,不会返回
使用call: call script.bat - 会执行完子脚本后返回到主脚本继续执行

3.2 生产消息测试

@echo off
:: =============================================
:: 生产消息测试
:: =============================================
:: 这个脚本启动一个控制台生产者
:: 你可以输入消息,它们会被发送到Kafka

echo 启动消息生产者...
echo 输入消息并按回车发送
echo 按 Ctrl+C 退出
echo.

kafka-console-producer.bat ^
  --topic test-topic ^
  --bootstrap-server localhost:9092

3.3 消费消息测试

@echo off
:: =============================================
:: 消费消息测试
:: =============================================
:: 这个脚本启动一个控制台消费者
:: 它会显示指定主题的所有消息

echo 启动消息消费者...
echo 正在监听 test-topic 主题的消息...
echo 按 Ctrl+C 退出
echo.

kafka-console-consumer.bat ^
  --topic test-topic ^
  --from-beginning ^
  --bootstrap-server localhost:9092

第四部分:完整自动化安装脚本

创建 install-kafka-***plete.bat

@echo off
setlocal EnableDelayedExpansion

echo =============================================
echo   Kafka 3.9.1 Kraft 模式完整安装脚本
echo =============================================

:: 配置变量
set KAFKA_HOME=C:\kafka_2.13-3.9.1
set CONFIG_FILE=%KAFKA_HOME%\config\kraft\server.properties

:: 步骤1: 环境检查
echo [1/6] 检查环境...
java -version >nul 2>&1
if errorlevel 1 (
    echo ❌ 错误: 未找到Java,请先安装Java
    pause
    exit /b 1
)

if not exist "%KAFKA_HOME%" (
    echo ❌ 错误: Kafka目录不存在: %KAFKA_HOME%
    pause
    exit /b 1
)

:: 步骤2: 生成集群ID
echo [2/6] 生成集群ID...
cd %KAFKA_HOME%
for /f "tokens=*" %%i in ('kafka-storage.bat random-uuid') do set CLUSTER_ID=%%i
echo ✅ 集群ID: !CLUSTER_ID!

:: 步骤3: 创建日志目录
echo [3/6] 创建日志目录...
if not exist "%KAFKA_HOME%\logs" mkdir "%KAFKA_HOME%\logs"

:: 步骤4: 格式化存储
echo [4/6] 格式化存储目录...
kafka-storage.bat format --cluster-id !CLUSTER_ID! --config !CONFIG_FILE!
if errorlevel 1 goto :error

:: 步骤5: 创建管理脚本
echo [5/6] 创建管理脚本...

:: 创建启动脚本
echo @echo off > "%KAFKA_HOME%\start-kafka.bat"
echo echo 启动Kafka Kraft模式... >> "%KAFKA_HOME%\start-kafka.bat"
echo cd /d "%KAFKA_HOME%" >> "%KAFKA_HOME%\start-kafka.bat"
echo kafka-server-start.bat config\kraft\server.properties >> "%KAFKA_HOME%\start-kafka.bat"

:: 创建停止脚本
echo @echo off > "%KAFKA_HOME%\stop-kafka.bat"
echo echo 停止Kafka... >> "%KAFKA_HOME%\stop-kafka.bat"
echo taskkill /f /im java.exe /t ^>nul 2^>^&1 >> "%KAFKA_HOME%\stop-kafka.bat"
echo echo Kafka已停止 >> "%KAFKA_HOME%\stop-kafka.bat"
echo pause >> "%KAFKA_HOME%\stop-kafka.bat"

:: 步骤6: 完成
echo [6/6] 安装完成!
echo.
echo =============================================
echo   ✅ Kafka 3.9.1 安装成功!
echo =============================================
echo.
echo 管理命令:
echo   启动Kafka: start-kafka.bat
echo   停止Kafka: stop-kafka.bat
echo   测试功能: test-kafka.bat
echo.
echo 集群ID: !CLUSTER_ID!
echo 客户端端口: 9092
echo 控制器端口: 9093
echo.
pause
exit /b 0

:error
echo.
echo ❌ 安装过程中出现错误
echo 请检查:
echo 1. Java是否正确安装
echo 2. 端口9092,9093是否被占用
echo 3. 是否有文件写入权限
echo.
pause
exit /b 1

第五部分:重要概念解释

Kraft 模式 vs ZooKeeper 模式

特性 Kraft 模式 ZooKeeper 模式
架构 内置元数据管理 需要外部ZooKeeper
部署 更简单,单进程 需要部署两个系统
性能 更好,减少网络跳转 额外的网络开销
运维 更简单 需要维护两个系统

关键端口说明

  • 9092: 客户端端口(生产/消费消息)
  • 9093: 控制器端口(集群管理)
  • 确保防火墙允许这些端口

其他

上述命令中出现了 ^ 符号,简单解释下:
^ 符号在 Windows 批处理中是一个续行符(line continuation character)。


推开窗,是别人的车马喧嚣;关上门,才是自家的月光皎洁。在属于自己的节奏里泡茶、读书、慢慢行走,力量,自会在不言中生长。 耐得寂寞蓄力气,终有一朝破土鸣。

转载请说明出处内容投诉
CSS教程网 » 中间件总结 - 消息队列 - Windows 上安装 Apache Kafka 3.9.1 Kraft 模式

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买