快速搭建 Linux Kafka 集群
一、方案选择与准备
- 推荐选择 Kafka 4.0+ KRaft 模式(无需 ZooKeeper,部署更简洁)。准备 3 台 Linux 主机(物理机/虚拟机/云主机均可),并安装 Java 17+。示例以 Ubuntu 演示,其他发行版命令类似。KRaft 下需为集群生成 Cluster ID 并初始化存储目录。若使用旧版本(如 3.x),需额外部署 ZooKeeper 集群。
二、3 节点 KRaft 集群搭建步骤
- 1)安装 Java
- Ubuntu/Debian:
- sudo apt update && sudo apt install -y openjdk-17-jdk
- java -version
- 2)下载并解压 Kafka
- wget https://downloads.apache.org/kafka/4.0.0/kafka_2.13-4.0.0.tgz
- tar -xzf kafka_2.13-4.0.0.tgz && cd kafka_2.13-4.0.0
- 3)生成 Cluster ID(只需一次,三台节点用同一个 ID)
- ./bin/kafka-storage.sh random-uuid
- 4)为每台节点准备配置文件(示例为 node1/node2/node3)
- 建议将 config/kraft/server.properties 复制为 server-node{1,2,3}.properties,并修改以下关键项:
- process.roles=broker,controller
- node.id=1(每台唯一:1/2/3)
- controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093
- listeners=PLAINTEXT://:9092,CONTROLLER://:9093
- advertised.listeners=PLAINTEXT://<本机可访问IP或主机名>:9092
- log.dirs=/data/kafka-logs-node
- 5)格式化存储目录(三台节点均执行,使用同一 Cluster ID)
- ./bin/kafka-storage.sh format -t -c ./server-node1.properties
- ./bin/kafka-storage.sh format -t -c ./server-node2.properties
- ./bin/kafka-storage.sh format -t -c ./server-node3.properties
- 6)启动服务(每台节点)
- ./bin/kafka-server-start.sh ./server-node.properties
- 7)验证
- 创建复制因子为 3 的主题(任一节点执行):
- ./bin/kafka-topics.sh --create --topic replicated-topic --bootstrap-server node1:9092 --partitions 1 --replication-factor 3
- 查看分区与副本分配:
- ./bin/kafka-topics.sh --describe --topic replicated-topic --bootstrap-server node1:9092
- 生产与消费测试:
- ./bin/kafka-console-producer.sh --topic replicated-topic --bootstrap-server node1:9092
- ./bin/kafka-console-consumer.sh --topic replicated-topic --from-beginning --bootstrap-server node1:9092
三、旧版本 3.x 使用 ZooKeeper 的极速部署
- 1)准备 3 节点 ZooKeeper 集群(clientPort=2181,server.x=host:2888:3888,各自 dataDir 下放置 myid=1/2/3)。
- 2)下载解压 Kafka 3.x(如 3.6.0),在每台 Broker 的 config/server.properties 中设置:
- broker.id=<唯一ID>
- listeners=PLAINTEXT://0.0.0.0:9092
- advertised.listeners=PLAINTEXT://<本机IP>:9092
- log.dirs=/var/lib/kafka
- zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
- 3)启动 ZooKeeper 集群(每台):
- nohup bin/zookeeper-server-start.sh config/zookeeper.properties > zk.log 2>&1 &
- 4)启动 Kafka 集群(每台):
- bin/kafka-server-start.sh config/server.properties
- 5)验证(旧版常用 --zookeeper;新版也可用 --bootstrap-server):
- bin/kafka-topics.sh --create --zookeeper zk1:2181,zk2:2181,zk3:2181 --replication-factor 3 --partitions 1 --topic test
- bin/kafka-topics.sh --describe --zookeeper zk1:2181 --topic test
- 生产/消费测试同上。
四、关键配置与常见问题
- 关键配置要点
- KRaft 模式核心参数:process.roles、node.id(集群唯一)、controller.quorum.voters(控制器法定人数,三节点通常为 1@h1:9093,2@h2:9093,3@h3:9093)、listeners/advertised.listeners(对外可达地址)、log.dirs(多盘可逗号分隔)。生产建议将 controller 与 broker 角色分离 部署以提升稳定性与性能。
- 常见故障排查
- advertised.listeners 配置错误导致客户端无法连接(请填写其他节点与客户端可访问的 IP/主机名)。
- 防火墙未放行 9092/9093,导致节点间或客户端无法通信(开放相应端口或临时关闭防火墙测试)。
- 复制因子不能大于 Broker 数量;创建测试主题时按实际 Broker 数设置 replication.factor。
- 新集群首次启动前未执行 kafka-storage.sh format(KRaft 必需步骤)。