如何通过Ubuntu配置Kafka集群
小樊
48
2025-11-15 16:09:51
在 Ubuntu 上配置 Kafka 集群
一 环境准备与规划
- 准备至少 3 台 Ubuntu 服务器(示例主机名:kafka1、kafka2、kafka3;内网网段如 192.168.1.0/24),并配置 主机名解析 或 DNS。
- 安装 Java 11(Kafka 3.x 推荐):sudo apt update && sudo apt install -y openjdk-11-jdk;验证:java -version。
- 开放防火墙端口(如使用 firewalld):sudo firewall-cmd --zone=public --add-port=9092/tcp --permanent && sudo firewall-cmd --reload(如还使用 9093 也一并开放)。
- 规划目录:建议将 Kafka 安装至 /opt/kafka,日志目录 /var/lib/kafka/logs,并按节点设置唯一 broker.id。
- 选择部署模式:传统 Zookeeper 模式或 KRaft(Kafka Raft Metadata)模式。生产环境建议 KRaft,以减少外部依赖。
二 部署方案 KRaft 模式(推荐)
- 下载并解压 Kafka(示例版本 3.6.2):
wget https://downloads.apache.org/kafka/3.6.2/kafka_2.12-3.6.2.tgz
tar -xzf kafka_2.12-3.6.2.tgz && sudo mv kafka_2.12-3.6.2 /opt/kafka
- 生成集群 ID(在任一节点执行一次):
/opt/kafka/bin/kafka-storage.sh random-uuid
- 配置节点(/opt/kafka/config/kraft/server.properties,三台节点分别配置):
- 唯一节点 ID:node.id=1(kafka2 用 2,kafka3 用 3)
- 控制器法定人数:controller.quorum.voters=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
- 监听地址:listeners=PLAINTEXT://:9092,CONTROLLER://:9093
- 对外地址:advertised.listeners=PLAINTEXT://<本机内网IP>:9092
- 日志目录:log.dirs=/var/lib/kafka/logs
- 格式化存储(三台节点均执行,使用同一集群 ID):
/opt/kafka/bin/kafka-storage.sh format -t <上一步生成的UUID> -c /opt/kafka/config/kraft/server.properties
- 启动服务(每台节点):
sudo /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.properties
- 验证监听:ss -lntp | grep :9092 与 ss -lntp | grep :9093。
三 部署方案 Zookeeper 模式(传统)
- 安装并配置 Zookeeper 集群(至少 3 节点,示例使用 3.7.0):
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
tar -xzf apache-zookeeper-3.7.0-bin.tar.gz && sudo mv apache-zookeeper-3.7.0 /opt/zookeeper
编辑 /opt/zookeeper/conf/zoo.cfg:
- dataDir=/var/lib/zookeeper
- clientPort=2181
- server.0=kafka1:2888:3888;server.1=kafka2:2888:3888;server.2=kafka3:2888:3888
在每台节点的 dataDir 下创建 myid 文件,内容分别为 0、1、2。
启动:/opt/zookeeper/bin/zkServer.sh start
- 安装并配置 Kafka(示例版本 3.6.2):
wget https://downloads.apache.org/kafka/3.6.2/kafka_2.12-3.6.2.tgz
tar -xzf kafka_2.12-3.6.2.tgz && sudo mv kafka_2.12-3.6.2 /opt/kafka
编辑 /opt/kafka/config/server.properties(三台节点分别配置):
- broker.id=0/1/2(唯一)
- listeners=PLAINTEXT://:9092
- advertised.listeners=PLAINTEXT://<本机内网IP>:9092
- log.dirs=/var/lib/kafka/logs
- zookeeper.connect=kafka1:2181,kafka2:2181,kafka3:2181
- 启动 Kafka(每台节点):
sudo /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
四 验证与常用运维命令
- 创建测试主题(使用 KRaft 或 Zookeeper 的 bootstrap-server 参数):
/opt/kafka/bin/kafka-topics.sh --create --bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092 \
–replication-factor 3 --partitions 1 --topic test-topic
- 列出主题:
/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server kafka1:9092
- 生产消息:
/opt/kafka/bin/kafka-console-producer.sh --bootstrap-server kafka1:9092 --topic test-topic
- 消费消息:
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic test-topic --from-beginning
- 查看主题详情(确认 Leader/Replicas/ISR):
/opt/kafka/bin/kafka-topics.sh --describe --topic test-topic --bootstrap-server kafka1:9092
- 停止服务:
- KRaft:/opt/kafka/bin/kafka-server-stop.sh
- Zookeeper:/opt/zookeeper/bin/zkServer.sh stop
五 常见问题与优化建议
- 监听与连通性:务必正确设置 listeners 与 advertised.listeners,客户端通过 advertised.listeners 连接;云服务器需使用 内网 IP 或 弹性 IP 并确保安全组/防火墙放行 9092。
- 唯一性与目录:每个节点的 broker.id(KRaft 为 node.id) 必须唯一;更换 KRaft 集群时需清理 log.dirs 后再 format。
- 高可用:副本因子建议 ≥ 3,分区数按吞吐与并行度规划;生产环境优先 KRaft 模式。
- 监控与日志:配置 JMX 监控与日志轮转(log4j2),关注 UnderReplicatedPartitions、RequestHandlerAvgIdlePercent 等指标。