以下是在CentOS上实现Kafka高可用的方案,包含关键配置和部署要点:
一、集群基础架构
-
多节点部署
- 部署3个及以上Kafka Broker节点,每个节点运行在不同服务器,避免单点故障。
- 若使用Zookeeper,需配置3节点Zookeeper集群(Kafka 2.8+可逐步脱离Zookeeper,采用KRaft模式)。
-
硬件与网络
- 使用SSD存储提升I/O性能,预留2倍消息存储空间。
- 确保服务器间高速稳定网络(如万兆网卡),配置合理的内核参数(如
net.core.rmem_max)。
二、核心配置要点
-
Kafka配置(
server.properties)- 唯一标识:每个Broker设置唯一
broker.id。 - 监听配置:
listeners=PLAINTEXT://0.0.0.0:9092 # 监听所有IP advertised.listeners=PLAINTEXT://broker1.example.com:9092 # 客户端连接地址 - 副本与分区:
default.replication.factor=3:默认副本数3,确保数据冗余。min.insync.replicas=2:写入时至少2个副本同步成功才返回成功。
- 自动故障转移:启用
auto.leader.rebalance.enable=true。
- 唯一标识:每个Broker设置唯一
-
Zookeeper配置(若使用)
- 配置3节点集群,
server.x=host:port:port格式指定成员。 - 设置
tickTime=2000、initLimit=5、syncLimit=2等参数保障集群稳定性。
- 配置3节点集群,
三、高可用关键机制
-
副本与Leader选举
- 每个分区选举1个Leader和多个Follower,Leader处理读写,Follower同步数据。
- Broker故障时,Controller自动触发Leader选举,从ISR(同步副本集合)中选择新Leader。
-
KRaft模式(Kafka 4.0+推荐)
- 去Zookeeper化,通过Controller节点管理元数据,支持高可用和一致性。
- 部署时需配置
process.roles=controller或broker,并设置controller.quorum.voters。
四、监控与运维
-
监控工具
- 使用Prometheus+Grafana监控Broker指标(如CPU、网络、堆积量)。
- 通过Kafka自带命令行工具查看集群状态:
# 查看Topic详情 bin/kafka-topics.sh --describe --topic my-topic --bootstrap-server broker1:9092 # 查看Broker列表 bin/zookeeper-shell.sh localhost ls /brokers/ids # Zookeeper模式
-
故障处理
- 定期备份Kafka数据目录(
log.dirs)和Zookeeper数据。 - 若节点故障,自动触发副本切换;极端情况可手动调整分区Leader:
bin/kafka-preferred-replica-election.sh --bootstrap-server broker1:9092
- 定期备份Kafka数据目录(
五、安全配置(可选)
- SSL/TLS加密:在
server.properties中配置listeners=SSL://并指定证书路径。 - SASL认证:启用
SASL_PLAINTEXT或SASL_SSL,配置用户名/密码认证。
参考来源: