Windows 系统搭建Kafka集群记录

在同一台 Windows 11 机器上模拟 ​​3 节点 Kafka 集群​ ​,通过 ​​不同端口​ ​ 和 ​​不同配置文件​​ 来实现。

1. 准备工作​

​1.1 确保 Kafka 已安装​

  • 已安装 Java(本记录使用jdk21)
  • 已安装 Kafka(本记录使用3.6.1版本)

​1.2 创建 Kafka 数据目录​

在 Kafka 安装目录或者其他地方(本记录参考:D:\work\kafka\kafka-cluster)创建 3 个数据目录:

kotlin 复制代码
D:\work\kafka\kafka-cluster\
├── broker1\
│   ├── data\          # Kafka 数据目录
│   └── logs\          # Kafka 日志目录
├── broker2\
│   ├── data\
│   └── logs\
└── broker3\
    ├── data\
    └── logs\

2. 配置 ZooKeeper​

先看效果图,有个预期

​2.1 修改 zookeeper.properties

从kafka安装目录下的config下(本记录参照:D:\work\kafka\kafka_2.13\config)复制 3 份 zookeeper.properties,分别放在 broker1broker2broker3 目录下修改内容:

ini 复制代码
# broker1/zookeeper.properties
# 2 秒(ZooKeeper 心跳时间单位)
tickTime=2000
# 允许 Follower 在 10 * 2000ms = 20s 内完成初始化同步
initLimit=10
# 如果 Leader 和 Follower 之间 5 * 2000ms = 10s 无心跳,则认为连接超时。
syncLimit=5
#  # ZooKeeper 数据目录(需手动创建文件夹)
dataDir=D:/work/kafka/kafka-cluster/broker1/data
# the port at which the clients will connect
clientPort=2181
# disable the per-ip limit on the number of connections since this is a non-production config
maxClientCnxns=0
# Disable the adminserver by default to avoid port conflicts.
# Set the port to something non-conflicting if choosing to enable this
admin.enableServer=false
# admin.serverPort=8080
# 
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
ini 复制代码
# broker2/zookeeper.properties
# 2 秒(ZooKeeper 心跳时间单位)
tickTime=2000
# 允许 Follower 在 10 * 2000ms = 20s 内完成初始化同步
initLimit=10
# 如果 Leader 和 Follower 之间 5 * 2000ms = 10s 无心跳,则认为连接超时。
syncLimit=5
#  # ZooKeeper 数据目录(需手动创建文件夹)
dataDir=D:/work/kafka/kafka-cluster/broker2/data
# the port at which the clients will connect
clientPort=2182
# disable the per-ip limit on the number of connections since this is a non-production config
maxClientCnxns=0
# Disable the adminserver by default to avoid port conflicts.
# Set the port to something non-conflicting if choosing to enable this
admin.enableServer=false
# admin.serverPort=8080
# 
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
ini 复制代码
# broker3/zookeeper.properties
# 2 秒(ZooKeeper 心跳时间单位)
tickTime=2000
# 允许 Follower 在 10 * 2000ms = 20s 内完成初始化同步
initLimit=10
# 如果 Leader 和 Follower 之间 5 * 2000ms = 10s 无心跳,则认为连接超时。
syncLimit=5
#  # ZooKeeper 数据目录(需手动创建文件夹)
dataDir=D:/work/kafka/kafka-cluster/broker3/data
# the port at which the clients will connect
clientPort=2183
# disable the per-ip limit on the number of connections since this is a non-production config
maxClientCnxns=0
# Disable the adminserver by default to avoid port conflicts.
# Set the port to something non-conflicting if choosing to enable this
admin.enableServer=false
# admin.serverPort=8080
# 
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

2.2 创建 myid 文件​

在每个 dataDir 下(也就是data目录下,本记录参照:D:\work\kafka\kafka-cluster\broker1\data)创建 myid 文件:

  • broker1/data/myid1
  • broker2/data/myid2
  • broker3/data/myid3

提醒:myid 文件的规则​

在搭建 Kafka 集群(依赖 ZooKeeper 时)时,myid 文件是 ZooKeeper 用来标识集群中每个节点身份的关键文件。

  • ​文件名​ ​:

    必须命名为 myid(​​无后缀名​ ​),不能是 myid.txtmyid.dat 等。

  • ​文件内容​ ​:

    仅包含一个数字(无空格、换行等),对应 zookeeper.propertiesserver.xx 值。

    例如:

    • 若配置 server.1=...,则 myid 文件内容为 1
    • 若配置 server.2=...,则 myid 文件内容为 2
  • ​文件位置​ ​:

    再次强调必须放在 zookeeper.propertiesdataDir 指定的目录下(本记录参考 D:\work\kafka\kafka-cluster\broker1\data

​2.3 启动 ZooKeeper 集群​

打开 ​​3 个 CMD 窗口​​,分别运行:

makefile 复制代码
# 窗口1(ZooKeeper 1)
D:\work\kafka\kafka_2.13\bin\windows\zookeeper-server-start.bat D:\work\kafka\kafka-cluster\broker1\zookeeper.properties

# 窗口2(ZooKeeper 2)
D:\work\kafka\kafka_2.13\bin\windows\zookeeper-server-start.bat D:\work\kafka\kafka-cluster\broker2\zookeeper.properties

# 窗口3(ZooKeeper 3)
D:\work\kafka\kafka_2.13\bin\windows\zookeeper-server-start.bat D:\work\kafka\kafka-cluster\broker3\zookeeper.properties

3. 配置 Kafka 集群​

​3.1 修改 server.properties

从kafka安装目录config下(本记录参照:D:\work\kafka\kafka_2.13\config)复制 3 份 server.properties,分别放在 broker1broker2broker3 目录下修改:

ini 复制代码
# broker1/server.properties
broker.id=1
listeners=PLAINTEXT://localhost:9092
advertised.listeners=PLAINTEXT://localhost:9092
log.dirs=D:/work/kafka/kafka-cluster/broker1/logs
zookeeper.connect=localhost:2181,localhost:2182,localhost:2183
ini 复制代码
# broker2/server.properties
broker.id=2
listeners=PLAINTEXT://localhost:9093
advertised.listeners=PLAINTEXT://localhost:9093
log.dirs=D:/work/kafka/kafka-cluster/broker2/logs
zookeeper.connect=localhost:2181,localhost:2182,localhost:2183
ini 复制代码
# broker3/server.properties
broker.id=3
listeners=PLAINTEXT://localhost:9094
advertised.listeners=PLAINTEXT://localhost:9094
log.dirs=D:/work/kafka/kafka-cluster/broker3/logs
zookeeper.connect=localhost:2181,localhost:2182,localhost:2183

​3.2 启动 Kafka 集群​

再打开 ​​3 个 CMD 窗口​​,分别运行:

makefile 复制代码
# 窗口4(Kafka Broker 1)
D:\work\kafka\kafka_2.13\bin\windows\kafka-server-start.bat D:\work\kafka\kafka-cluster\broker1\server.properties

# 窗口5(Kafka Broker 2)
D:\work\kafka\kafka_2.13\bin\windows\kafka-server-start.bat D:\work\kafka\kafka-cluster\broker2\server.properties

# 窗口6(Kafka Broker 3)
D:\work\kafka\kafka_2.13\bin\windows\kafka-server-start.bat D:\work\kafka\kafka-cluster\broker3\server.properties

4. 验证集群​

​4.1 查看 Broker 列表​

D:\work\kafka\kafka_2.13目录下新启一个命令窗口--窗口7,运行

css 复制代码
bin\windows\kafka-broker-api-versions.bat --bootstrap-server localhost:9092

应该看到 3 个 Broker(broker.id=1,2,3)。

​4.2 创建 Topic​

窗口7,运行

css 复制代码
bin\windows\kafka-topics.bat --create --topic test --partitions 3 --replication-factor 3 --bootstrap-server localhost:9092

​4.3 查看 Topic 详情​

窗口7,运行

css 复制代码
bin\windows\kafka-topics.bat --describe --topic test --bootstrap-server localhost:9092

输出示例:

yaml 复制代码
Topic: test	PartitionCount: 3	ReplicationFactor: 3	Configs: 
	Topic: test	Partition: 0	Leader: 1	Replicas: 1,2,3	Isr: 1,2,3
	Topic: test	Partition: 1	Leader: 2	Replicas: 2,3,1	Isr: 2,3,1
	Topic: test	Partition: 2	Leader: 3	Replicas: 3,1,2	Isr: 3,1,2

说明分区均匀分布在 3 个 Broker 上。


​5. 测试生产 & 消费​

​5.1 启动生产者​

窗口7,运行

css 复制代码
bin\windows\kafka-console-producer.bat --topic test --bootstrap-server localhost:9092

​5.2 启动消费者​

D:\work\kafka\kafka_2.13目录下新启一个命令窗口--窗口8,运行

css 复制代码
bin\windows\kafka-console-consumer.bat --topic test --from-beginning --bootstrap-server localhost:9092

输入消息后,消费者应该能收到。


​6. 关闭集群​

Ctrl + C 依次关闭:

  1. 3 个 Kafka Broker
  2. 3 个 ZooKeeper

​7. 数据管理工具总览​

本记录使用kafka-console-ui。可以链接地址下载

启动完成,访问:http://127.0.0.1:7766

还有一些其他使用信息,直接参考kafka-console-ui项目首页提示信息

​8. 启动脚本优化​

每次启动带ui要7个脚本。要开7个窗口,贼麻烦。

本记录直接合并为一个脚本,一键启动。

目标是打开一个窗口,通过7个选项卡起别名区分颜色来管理

脚本命令参考:

bash 复制代码
@echo off
wt -p "Command Prompt" --title "2181-zb1" --tabColor "#54FF3C" cmd /k "D:\work\kafka\kafka_2.13\bin\windows\zookeeper-server-start.bat D:\work\kafka\kafka-cluster\broker1\zookeeper.properties & pause" ; ^
    -p "Command Prompt" --title "2182-zb1" --tabColor "#54FF3C"  cmd /k "D:\work\kafka\kafka_2.13\bin\windows\zookeeper-server-start.bat D:\work\kafka\kafka-cluster\broker2\zookeeper.properties & pause" ; ^
    -p "Command Prompt" --title "2183-zb1" --tabColor "#54FF3C" cmd /k "D:\work\kafka\kafka_2.13\bin\windows\zookeeper-server-start.bat D:\work\kafka\kafka-cluster\broker3\zookeeper.properties & pause" ; ^
     -p "Command Prompt" --title "9092-kafka-b1" --tabColor "#4584FF" cmd /k "timeout /t 7 /nobreak >nul & D:\work\kafka\kafka_2.13\bin\windows\kafka-server-start.bat D:\work\kafka\kafka-cluster\broker1\server.properties & pause" ; ^
     -p "Command Prompt" --title "9093-kafka-b2" --tabColor "#4584FF" cmd /k "timeout /t 7 /nobreak >nul & D:\work\kafka\kafka_2.13\bin\windows\kafka-server-start.bat D:\work\kafka\kafka-cluster\broker2\server.properties & pause" ; ^
     -p "Command Prompt" --title "9094-kafka-b3" --tabColor "#4584FF" cmd /k "timeout /t 7 /nobreak >nul & D:\work\kafka\kafka_2.13\bin\windows\kafka-server-start.bat D:\work\kafka\kafka-cluster\broker3\server.properties & pause" ; ^
     -p "Command Prompt" --title "kafka-ui" --tabColor "#A24BFF" cmd /k "timeaout /t 7 /nobreak >nul & cd /d D:\work\kafka\kafka-ui\kafka-console-ui\bin & start.bat & pause"

脚本建立放在kafka安装目录下,用的时候方便找。

相关推荐
撸猫7911 小时前
HttpSession 的运行原理
前端·后端·cookie·httpsession
嘵奇1 小时前
Spring Boot中HTTP连接池的配置与优化实践
spring boot·后端·http
子燕若水2 小时前
Flask 调试的时候进入main函数两次
后端·python·flask
程序员爱钓鱼2 小时前
跳转语句:break、continue、goto -《Go语言实战指南》
开发语言·后端·golang·go1.19
Persistence___3 小时前
SpringBoot中的拦截器
java·spring boot·后端
嘵奇3 小时前
Spring Boot 跨域问题全解:原理、解决方案与最佳实践
java·spring boot·后端
景天科技苑4 小时前
【Rust泛型】Rust泛型使用详解与应用场景
开发语言·后端·rust·泛型·rust泛型
lgily-12257 小时前
常用的设计模式详解
java·后端·python·设计模式
意倾城7 小时前
Spring Boot 配置文件敏感信息加密:Jasypt 实战
java·spring boot·后端
火皇4057 小时前
Spring Boot 使用 OSHI 实现系统运行状态监控接口
java·spring boot·后端