温馨提示×

centos如何实现kafka的高可用

小樊
35
2025-12-25 10:40:32
栏目: 智能运维

在 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=3transaction.state.log.replication.factor=3;生产端设置 acks=all,Broker 端 min.insync.replicas=2,在性能与可用性间取得平衡。
  • 分区与负载
    • 分区数建议≥Broker 数且按业务并行度规划;创建主题时显式指定分区与副本,避免依赖默认值。
  • 故障与恢复
    • 单 Broker 宕机时,分区 Leader 会自动在 ISR 中重新选举,确保服务连续;定期巡检 ISR、Under-Replicated 分区与 Broker 磁盘/网络健康度,必要时扩容或再均衡分区。
  • 网络与安全
    • 正确配置 listeners/advertised.listeners,避免内外网错配;生产环境建议启用 SSL/TLSSASL 认证,并限制端口访问与 ACL 授权。

0