温馨提示×

ubuntu kafka如何集群部署

小樊
55
2026-08-17 19:25:17
栏目: 智能运维

下面给你一个**在 Ubuntu 上部署 Kafka 集群(多节点)**的完整实战流程,基于 Kafka 3.x + KRaft 模式(推荐,不再依赖 ZooKeeper),这是目前最主流、最简单的方案。


一、环境准备

1️⃣ 服务器规划(示例)

节点 IP 角色
node1 192.168.1.101 Kafka
node2 192.168.1.102 Kafka
node3 192.168.1.103 Kafka

✅ 3 个节点,最少 3 个 controller 才能形成 quorum


2️⃣ 系统要求

# 所有节点执行
sudo apt update
sudo apt install -y openjdk-17-jdk wget curl
java -version

二、下载 Kafka

cd /opt
sudo wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
sudo tar -xzf kafka_2.13-3.7.0.tgz
sudo mv kafka_2.13-3.7.0 kafka
cd kafka

三、Kafka KRaft 集群配置(重点)

1️⃣ 生成 Cluster ID(任选一台)

KAFKA_CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)
echo $KAFKA_CLUSTER_ID

记录该 ID,例如:

xtzWWN4bTjitpL3kfd9s5g

2️⃣ 配置 server.properties(每个节点)

编辑:

vim config/kraft/server.properties

✅ node1 配置示例

node.id=1
process.roles=broker,controller
controller.quorum.voters=1@192.168.1.101:9093,2@192.168.1.102:9093,3@192.168.1.103:9093

listeners=PLAINTEXT://192.168.1.101:9092,CONTROLLER://192.168.1.101:9093
advertised.listeners=PLAINTEXT://192.168.1.101:9092

controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT

log.dirs=/opt/kafka/kraft-logs
metadata.log.dir=/opt/kafka/kraft-metadata

✅ node2

node.id=2
process.roles=broker,controller
controller.quorum.voters=1@192.168.1.101:9093,2@192.168.1.102:9093,3@192.168.1.103:9093

listeners=PLAINTEXT://192.168.1.102:9092,CONTROLLER://192.168.1.102:9093
advertised.listeners=PLAINTEXT://192.168.1.102:9092

✅ node3

node.id=3
process.roles=broker,controller
controller.quorum.voters=1@192.168.1.101:9093,2@192.168.1.102:9093,3@192.168.1.103:9093

listeners=PLAINTEXT://192.168.1.103:9092,CONTROLLER://192.168.1.103:9093
advertised.listeners=PLAINTEXT://192.168.1.103:9092

四、格式化存储目录(所有节点)

export KAFKA_CLUSTER_ID=xtzWWN4bTjitpL3kfd9s5g
bin/kafka-storage.sh format \
  -t $KAFKA_CLUSTER_ID \
  -c config/kraft/server.properties

五、启动 Kafka(所有节点)

bin/kafka-server-start.sh -daemon config/kraft/server.properties

检查:

jps
# 应有 Kafka

六、验证集群

1️⃣ 创建 Topic

bin/kafka-topics.sh \
  --bootstrap-server 192.168.1.101:9092 \
  --create \
  --topic test-topic \
  --partitions 3 \
  --replication-factor 3

2️⃣ 查看 Topic 状态

bin/kafka-topics.sh \
  --bootstrap-server 192.168.1.101:9092 \
  --describe \
  --topic test-topic

期望看到:

Replicas: 1,2,3
Isr: 1,2,3

3️⃣ 生产 / 消费测试

# 生产
bin/kafka-console-producer.sh \
  --bootstrap-server 192.168.1.101:9092 \
  --topic test-topic

# 消费(另一终端)
bin/kafka-console-consumer.sh \
  --bootstrap-server 192.168.1.101:9092 \
  --topic test-topic \
  --from-beginning

七、常见注意事项

✅ 防火墙

sudo ufw allow 9092
sudo ufw allow 9093

✅ 生产环境建议

  • 单独 controller 节点(process.roles=controller)
  • JVM 堆内存调整:
export KAFKA_HEAP_OPTS="-Xms2G -Xmx2G"

✅ 日志目录不要放 /tmp


八、ZooKeeper vs KRaft 选择建议

模式 建议
ZooKeeper ❌ Kafka 3.x 起已废弃
KRaft ✅ 强烈推荐

如果你需要:

  • 生产级 systemd 服务
  • Docker / Docker Compose 集群
  • ZooKeeper 模式
  • 安全(SASL/SSL)

告诉我你的使用场景,我可以直接给你对应配置。

0 踩