在 CentOS 上构建高可用 Kafka 集群
一 架构与前提
- 至少准备3 台CentOS 主机(物理机/虚拟机均可),每台安装Java 8+。Kafka 的高可用依赖多 Broker 与多副本机制,生产环境建议副本数≥3、Broker 数≥3,并优先使用KRaft 模式(Kafka 3.5+)替代外部 ZooKeeper,减少依赖与故障点。若使用 ZooKeeper,也需部署3 节点ZooKeeper 集群。为降低跨主机通信故障,建议配置主机名解析与NTP 时间同步,并开放必要端口(如 9092、ZooKeeper 的 2181/2888/3888)。
二 方案一 KRaft 模式部署(Kafka 3.5+ 推荐)
- 安装与目录
- 下载解压 Kafka,创建数据与日志目录(示例:/var/lib/kafka/data、/var/log/kafka),创建系统用户 kafka 并授权。
- 生成集群 ID
- 在任一节点执行:bin/kafka-storage.sh random-uuid,得到如:ABC123-… 的集群 ID。
- 格式化存储
- 在每个节点执行(使用上一步的集群 ID):bin/kafka-storage.sh format -t -c config/kraft/server.properties
- 关键配置 server.properties(每个节点不同之处已标注)
- process.roles=broker,controller
- node.id=<唯一ID:1/2/3>
- controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093
- listeners=PLAINTEXT://:9092,CONTROLLER://:9093
- advertised.listeners=PLAINTEXT://<本机IP或FQDN>:9092
- listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
- inter.broker.listener.name=PLAINTEXT
- log.dirs=/var/lib/kafka/data
- num.partitions=3
- default.replication.factor=3
- min.insync.replicas=2
- auto.leader.rebalance.enable=true
- group.initial.rebalance.delay.ms=0
- 启动与验证
- 各节点启动:bin/kafka-server-start.sh -daemon config/kraft/server.properties
- 查看控制器:bin/kafka-metadata-quorum.sh --bootstrap-server <任一节点IP>:9092 describe --status
- 创建测试主题:bin/kafka-topics.sh --create --topic ha-test --bootstrap-server <任一节点IP>:9092 --partitions 3 --replication-factor 3
- 查看分区分布:bin/kafka-topics.sh --describe --topic ha-test --bootstrap-server <任一节点IP>:9092
- 生产与消费验证:使用 console-producer/console-consumer 跨节点收发消息,确认无单点故障。
三 方案二 外部 ZooKeeper 模式部署(Kafka 2.x 或兼容场景)
- ZooKeeper 集群
- 配置 zoo.cfg:dataDir=/var/lib/zookeeper;clientPort=2181;server.1=node1:2888:3888;server.2=node2:2888:3888;server.3=node3:2888:3888。各节点在 dataDir 下创建 myid 文件,内容分别为 1/2/3。启动各节点 ZooKeeper。
- Kafka Broker 配置 server.properties(每个节点不同之处已标注)
- broker.id=<唯一ID:1/2/3>
- listeners=PLAINTEXT://:9092
- advertised.listeners=PLAINTEXT://<本机IP或FQDN>:9092
- log.dirs=/var/log/kafka
- zookeeper.connect=node1:2181,node2:2181,node3:2181
- num.partitions=3
- default.replication.factor=3
- min.insync.replicas=2
- auto.leader.rebalance.enable=true
- group.initial.rebalance.delay.ms=0
- 启动与验证
- 各节点启动 Kafka:bin/kafka-server-start.sh -daemon config/server.properties
- 创建主题与验证步骤同 KRaft(使用 --bootstrap-server 连接任一 Broker)。
四 高可用关键配置与运维要点
- 复制与一致性
- 主题副本数≥3,关键内部主题如 offsets.topic.replication.factor=3、transaction.state.log.replication.factor=3;生产端设置 acks=all,Broker 端 min.insync.replicas=2,在性能与可用性间取得平衡。
- 分区与负载
- 分区数建议≥Broker 数且按业务并行度规划;创建主题时显式指定分区与副本,避免依赖默认值。
- 故障与恢复
- 单 Broker 宕机时,分区 Leader 会自动在 ISR 中重新选举,确保服务连续;定期巡检 ISR、Under-Replicated 分区与 Broker 磁盘/网络健康度,必要时扩容或再均衡分区。
- 网络与安全
- 正确配置 listeners/advertised.listeners,避免内外网错配;生产环境建议启用 SSL/TLS 与 SASL 认证,并限制端口访问与 ACL 授权。