kafka于centos如何实现高可用
导读:在 CentOS 上构建高可用 Kafka 集群 一、架构与前提 采用至少 3 台 CentOS 主机组成 Kafka 集群,每台主机运行一个 Broker;为消除单点,建议同时部署 3 节点 ZooKeeper 集群(Kafka 2.8...
在 CentOS 上构建高可用 Kafka 集群
一、架构与前提
- 采用至少 3 台 CentOS 主机组成 Kafka 集群,每台主机运行一个 Broker;为消除单点,建议同时部署 3 节点 ZooKeeper 集群(Kafka 2.8 之前强依赖 ZK;2.8+ 可使用 KRaft 模式,此处以 ZK 为例)。
- 目标:通过多副本与 Leader 自动切换 实现服务连续可用;写入高可靠建议将 acks=all 并合理设置 min.insync.replicas,使数据只有在 ISR(In-Sync Replicas) 全部落盘后才返回成功。
- 基础组件:安装 Java 8+,开放 9092(Kafka) 与 2181(ZooKeeper) 端口,Broker 间与客户端网络互通。
二、部署步骤
- 安装 Java
- 执行:
sudo yum install java-1.8.0-openjdk-devel -y & & java -version
- 执行:
- 安装与配置 ZooKeeper 集群(3 节点)
- 配置
/etc/zookeeper/conf/zoo.cfg:dataDir=/var/lib/zookeeperclientPort=2181initLimit=5、syncLimit=2server.1=zookeeper1:2888:3888、server.2=zookeeper2:2888:3888、server.3=zookeeper3:2888:3888
- 启动:
sudo systemctl start zookeeper & & sudo systemctl enable zookeeper
- 配置
- 安装与配置 Kafka(每台 Broker 唯一配置)
- 下载解压 Apache Kafka(示例版本 3.5.2)至
/opt/kafka - 编辑
config/server.properties(示例为节点 1):broker.id=1(各节点唯一)listeners=PLAINTEXT://:9092advertised.listeners=PLAINTEXT://< 本机IP或FQDN> :9092(便于外部访问)log.dirs=/var/lib/kafka/logszookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
- 启动:
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
- 下载解压 Apache Kafka(示例版本 3.5.2)至
- 防火墙放行
- 执行:
sudo firewall-cmd --zone=public --add-port=9092/tcp --permanent & & sudo firewall-cmd --zone=public --add-port=2181/tcp --permanent & & sudo firewall-cmd --reload
- 执行:
三、高可用关键配置与验证
- 主题与副本(至少 3 副本,跨不同 Broker)
- 创建:
/opt/kafka/bin/kafka-topics.sh --create --topic my-topic --bootstrap-server < 任一BrokerIP> :9092 --partitions 3 --replication-factor 3 - 查看:
/opt/kafka/bin/kafka-topics.sh --describe --topic my-topic --bootstrap-server < 任一BrokerIP> :9092
- 创建:
- 生产者高可靠(避免丢数据)
- 关键参数:
acks=all、retries=Integer.MAX_VALUE、enable.idempotence=true、max.in.flight.requests.per.connection=5(幂等生产者) - 示例:
/opt/kafka/bin/kafka-console-producer.sh --broker-list < 任一BrokerIP> :9092 --topic my-topic --producer-property acks=all --producer-property enable.idempotence=true
- 关键参数:
- 消费者与可用性
- 示例:
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server < 任一BrokerIP> :9092 --topic my-topic --from-beginning --group my-group - 验证:停止某台 Broker,观察分区 Leader 是否在其他副本上自动切换,业务应持续可用。
- 示例:
四、稳定性与运维要点
- 资源与系统调优
- 堆内存:在
kafka-server-start.sh前设置export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G"(按机器内存调整) - 文件描述符与内存映射:
ulimit -n 65536;vm.max_map_count=262144 - 存储与文件系统:推荐 XFS/EXT4,合理分区与磁盘阵列,避免单盘瓶颈
- 堆内存:在
- 监控与故障演练
- 使用 JMX 与 Kafka 自带工具监控 UnderReplicatedPartitions、ISR 收缩、请求延迟 等指标;定期演练 Broker 宕机与网络抖动场景,验证自动切换与恢复时效
- 网络与拓扑
- 跨机架/可用区部署 Broker,避免单机房/单电源故障面;客户端配置多个
bootstrap.servers提升容错
- 跨机架/可用区部署 Broker,避免单机房/单电源故障面;客户端配置多个
五、常见问题与排查
- 新主题不可高可用:副本数小于 3 或副本未跨不同 Broker;重建主题或增加副本,确保
replication.factor > = 3且分区分布均衡。 - Leader 频繁切换:磁盘/网络抖动导致副本掉出 ISR;优化磁盘 IOPS 与网络,适度提高
replica.lag.time.max.ms,并检查频繁 GC。 - 客户端连不通:未正确配置
advertised.listeners或防火墙未放行 9092;修正监听地址并开放端口。 - 数据不一致风险:生产者
acks=1或min.insync.replicas过低;改为acks=all并将min.insync.replicas设为 2(配合replication.factor=3使用)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: kafka于centos如何实现高可用
本文地址: https://pptw.com/jishu/754525.html
