下面给你一份在 Ubuntu 上搭建 Kafka 集群的实用配置示例(以 Kafka 3.x + KRaft 模式为主,也补充 ZooKeeper 模式区别)。
假设 3 台机器:
| 主机名 | IP |
|---|---|
| kafka1 | 192.168.1.11 |
| kafka2 | 192.168.1.12 |
| kafka3 | 192.168.1.13 |
每台都执行:
sudo apt update
sudo apt install -y openjdk-17-jdk
java -version
下载 Kafka:
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzf kafka_2.13-3.7.0.tgz
sudo mv kafka_2.13-3.7.0 /opt/kafka
在 任意一台 执行:
KAFKA_CLUSTER_ID=$(/opt/kafka/bin/kafka-storage.sh random-uuid)
echo $KAFKA_CLUSTER_ID
编辑 /opt/kafka/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
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
log.dirs=/opt/kafka/data
process.roles=broker,controller
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
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
log.dirs=/opt/kafka/data
process.roles=broker,controller
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
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
log.dirs=/opt/kafka/data
process.roles=broker,controller
/opt/kafka/bin/kafka-storage.sh format \
-t $KAFKA_CLUSTER_ID \
-c /opt/kafka/config/kraft/server.properties
/opt/kafka/bin/kafka-server-start.sh \
-daemon /opt/kafka/config/kraft/server.properties
/opt/kafka/bin/kafka-broker-api-versions.sh --bootstrap-server 192.168.1.11:9092
/opt/kafka/bin/kafka-topics.sh \
--create \
--topic test \
--partitions 3 \
--replication-factor 3 \
--bootstrap-server 192.168.1.11:9092
查看:
kafka-topics.sh --describe --topic test --bootstrap-server 192.168.1.11:9092
如果你用的是 Kafka 2.x / 早期 3.x:
server.properties 中:zookeeper.connect=192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181
✅ 防火墙放行:
sudo ufw allow 9092,9093,2181/tcp
✅ advertised.listeners 必须是其他机器能访问的 IP
✅ node.id 在集群中必须唯一
如果你愿意,我可以:
你现在是 物理机 / 虚拟机 / 云服务器?