下面给你一个从零在 Linux 上搭建 Kafka 集群的实战步骤(以 Kafka 3.x + KRaft 模式 为例,这也是现在官方推荐的方式,不再依赖 ZooKeeper)。
假设有 3 台 Linux 服务器:
| 主机名 | IP |
|---|---|
| kafka1 | 192.168.1.11 |
| kafka2 | 192.168.1.12 |
| kafka3 | 192.168.1.13 |
Kafka 集群最少 3 个节点,生产环境推荐 3/5 个
java -version
在三台机器上都执行:
wget https://archive.apache.org/dist/kafka/3.6.1/kafka_2.13-3.6.1.tgz
tar -zxvf kafka_2.13-3.6.1.tgz
mv kafka_2.13-3.6.1 /opt/kafka
cd /opt/kafka
在 任意一台机器 执行:
KAFKA_CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)
echo $KAFKA_CLUSTER_ID
假设得到:
abc12345-6789-0abc-def1-23456789abcd
编辑 config/kraft/server.properties
node.id=1
controller.quorum.voters=1@192.168.1.11:9093,2@192.168.1.12:9093,3@192.168.1.13:9093
listeners=PLAINTEXT://192.168.1.11:9092,CONTROLLER://192.168.1.11:9093
advertised.listeners=PLAINTEXT://192.168.1.11:9092
log.dirs=/opt/kafka/data
node.id=2
controller.quorum.voters=1@192.168.1.11:9093,2@192.168.1.12:9093,3@192.168.1.13:9093
listeners=PLAINTEXT://192.168.1.12:9092,CONTROLLER://192.168.1.12:9093
advertised.listeners=PLAINTEXT://192.168.1.12:9092
log.dirs=/opt/kafka/data
node.id=3
controller.quorum.voters=1@192.168.1.11:9093,2@192.168.1.12:9093,3@192.168.1.13:9093
listeners=PLAINTEXT://192.168.1.13:9092,CONTROLLER://192.168.1.13:9093
advertised.listeners=PLAINTEXT://192.168.1.13:9092
log.dirs=/opt/kafka/data
bin/kafka-storage.sh format \
-t abc12345-6789-0abc-def1-23456789abcd \
-c config/kraft/server.properties
bin/kafka-server-start.sh -daemon config/kraft/server.properties
bin/kafka-topics.sh --create \
--topic test \
--partitions 3 \
--replication-factor 3 \
--bootstrap-server 192.168.1.11:9092
bin/kafka-topics.sh --describe \
--topic test \
--bootstrap-server 192.168.1.11:9092
看到 Leader / Replicas / ISR 正常即成功
# 生产
bin/kafka-console-producer.sh \
--topic test \
--bootstrap-server 192.168.1.11:9092
# 消费
bin/kafka-console-consumer.sh \
--topic test \
--from-beginning \
--bootstrap-server 192.168.1.12:9092
✅ 集群必须 node.id 唯一
✅ controller.quorum.voters 三台必须一致
✅ 防火墙一定要放行 9092 / 9093
✅ 时间同步(NTP)
如果你需要:
告诉我你的使用场景,我可以直接给你对应方案。