Kafka高可用配置搭建指南
Kafka的高可用性(HA)通过多节点集群、数据副本机制、故障自动转移等特性实现,以下是具体搭建步骤及关键配置:
一、前置准备
-
环境要求
- 至少3台Linux服务器(如CentOS/Ubuntu),确保网络互通;
- 每台服务器安装JDK 1.8+(Kafka依赖JVM);
- 推荐使用SSD存储(提升IO性能)。
-
集群规划
- Broker数量:至少3个(Kafka Controller选举需多数派,3节点可容忍1节点故障);
- ZooKeeper集群:Kafka依赖ZooKeeper管理元数据(如分区Leader、Broker状态),需部署3或5节点(奇数节点保证多数派)。
二、安装与配置ZooKeeper集群
ZooKeeper是Kafka集群的“大脑”,需先部署高可用的ZooKeeper集群:
-
下载并解压ZooKeeper
在所有ZooKeeper节点执行: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 cd apache-zookeeper-3.7.0-bin -
配置ZooKeeper
复制默认配置并修改zoo.cfg(关键参数):cp conf/zoo_sample.cfg conf/zoo.cfg vi conf/zoo.cfg添加以下内容(3节点示例):
tickTime=2000 # ZooKeeper基本时间单位(毫秒) dataDir=/var/lib/zookeeper # 数据目录(需提前创建) clientPort=2181 # 客户端连接端口 initLimit=5 # Leader与Follower初始同步超时(心跳数) syncLimit=2 # Leader与Follower同步超时(心跳数) server.1=zoo1:2888:3888 # 节点1,2888用于数据同步,3888用于Leader选举 server.2=zoo2:2888:3888 # 节点2 server.3=zoo3:2888:3888 # 节点3 -
创建myid文件
在每个ZooKeeper节点的dataDir目录下创建myid,内容为节点ID(与server.X中的X一致):echo "1" > /var/lib/zookeeper/myid # zoo1节点 echo "2" > /var/lib/zookeeper/myid # zoo2节点 echo "3" > /var/lib/zookeeper/myid # zoo3节点 -
启动ZooKeeper
在每个节点执行:bin/zkServer.sh start使用
bin/zkServer.sh status检查状态,确认3个节点均为Leader或Follower。
三、安装与配置Kafka Broker
在所有Kafka节点执行以下步骤:
-
下载并解压Kafka
wget https://downloads.apache.org/kafka/3.2.0/kafka_2.13-3.2.0.tgz tar -xzf kafka_2.13-3.2.0.tgz cd kafka_2.13-3.2.0 -
配置Kafka Broker
修改config/server.properties(关键参数):broker.id=1 # 当前Broker唯一ID(集群内不可重复) listeners=PLAINTEXT://:9092 # 监听地址(生产环境建议用SSL加密) advertised.listeners=PLAINTEXT://broker1:9092 # 对外暴露的Broker地址(客户端使用的地址) log.dirs=/var/lib/kafka-logs # 日志存储目录(需提前创建,建议挂载SSD) zookeeper.connect=zoo1:2181,zoo2:2181,zoo3:2181 # ZooKeeper集群地址 default.replication.factor=3 # Topic默认副本数(需≥2,建议3) min.insync.replicas=2 # 写入时需同步的最小副本数(需unclean.leader.election.enable=false # 禁止非同步副本成为Leader(避免数据丢失) group.initial.rebalance.delay.ms=0 # 消费者组初始再平衡延迟(0表示立即开始) -
启动Kafka Broker
在每个节点执行:bin/kafka-server-start.sh config/server.properties &使用
jps命令检查Kafka进程是否启动,或通过bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092验证Broker状态。
四、创建高可用Topic
创建Topic时需指定副本因子≥2(建议3)和分区数(建议为Broker数量的倍数,提升并行度):
bin/kafka-topics.sh --create \
--topic my-topic \
--bootstrap-server zoo1:9092,zoo2:9092,zoo3:9092 \
--replication-factor 3 \
--partitions 3
使用--describe查看Topic详情,确认副本分布均匀:
bin/kafka-topics.sh --describe --topic my-topic --bootstrap-server zoo1:9092
输出应显示每个分区的Leader和Follower分布在不同Broker上。
五、验证高可用性
-
生产者测试
启动生产者向Topic发送消息:bin/kafka-console-producer.sh --topic my-topic --bootstrap-server zoo1:9092,zoo2:9092,zoo3:9092输入测试消息(如
hello kafka)。 -
消费者测试
启动消费者消费消息:bin/kafka-console-consumer.sh --topic my-topic --from-beginning --bootstrap-server zoo1:9092,zoo2:9092,zoo3:9092确认能收到生产者发送的消息。
-
模拟Broker故障
手动停止某个Broker(如zoo1上的Kafka):bin/kafka-server-stop.sh观察消费者是否能继续消费(Kafka会自动将Leader转移到其他Broker),并检查Topic状态:
bin/kafka-topics.sh --describe --topic my-topic --bootstrap-server zoo2:9092,zoo3:9092确认Leader已切换至其他Broker,数据未丢失。
六、监控与运维
-
监控工具
- Prometheus + Grafana:监控Kafka集群的吞吐量、延迟、分区状态等指标;
- Kafka自带工具:使用
kafka-topics.sh、kafka-consumer-groups.sh等命令行工具查看Topic、消费者组状态。
-
日志管理
- 配置日志轮转(如
logrotate),避免日志文件过大占用磁盘空间; - 定期检查Kafka和ZooKeeper日志(位于
logs目录),及时排查故障。
- 配置日志轮转(如
-
故障恢复
- Broker宕机:重启故障Broker,Kafka会自动同步数据并恢复Leader角色;
- ZooKeeper宕机:修复故障节点并重启,若多数派节点恢复,集群可继续运行。
通过以上步骤,即可搭建一个具备数据冗余、故障自动转移能力的Kafka高可用集群。生产环境中还需根据业务需求调整分区数、副本因子、JVM参数等,进一步优化性能。