Kafka故障恢复配置指南
Kafka的高可用性与容错能力依赖于多副本机制、ISR(In-Sync Replicas)同步、Leader选举等核心设计,故障恢复配置需围绕这些机制展开,确保节点宕机、网络分区、数据不一致等问题能快速解决。
集群规模与副本因子
default.replication.factor=3(生产环境最小值),确保每个分区有3个副本(分布在不同机架/可用区,需配置broker.rack)。关键高可用参数
min.insync.replicas=2:至少需要2个同步副本才允许生产者写入,平衡可靠性与性能;acks=all:生产者需等待所有ISR副本确认,确保数据不丢失;unclean.leader.election.enable=false:禁止非ISR副本成为Leader,防止数据损坏。唯一标识与监听配置
broker.id(如1、2、3);listeners=PLAINTEXT://broker-host:9092(监听地址)和advertised.listeners=PLAINTEXT://broker-host:9092(客户端访问地址,集群内需指向Broker自身)。Zookeeper连接(旧版本)/KRaft(新版本)
zookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181,并调整zookeeper.session.timeout.ms=18000(会话超时,应对GC或网络延迟);controller.quorum.voters=1@broker1:9093,2@broker2:9093,3@broker3:9093(投票节点列表,需奇数),确保Controller选举稳定。JVM调优
-Xmx6g -Xms6g(避免频繁GC导致Broker停顿);-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35,优化GC性能。ISR机制配置
replica.lag.time.max.ms=30000(默认30秒):Follower副本超过此时间未同步Leader数据,则从ISR中移除;kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic your-topic查看各分区ISR数量,若ISR收缩(如从3个变为1个),需及时排查Follower延迟问题。副本同步性能优化
num.replica.fetchers=4:增加Follower副本拉取线程数,提升同步效率;replica.fetch.max.bytes=1048576(1MB):增大单次拉取数据量,减少网络往返次数。NotLeaderForPartitionException)。systemctl status kafka,查看日志tail -f /var/log/kafka/server.log定位故障原因(如OOM、磁盘满);systemctl restart kafka,观察日志确认加载元数据正常;kafka-topics.sh --describe查看分区Leader是否恢复,ISR是否包含该Broker。systemctl stop kafka(所有节点);zkCli.sh -server zk1:2181 rmr /brokers/ids;DiskErrorException)、分区数据丢失。kafka-reassign-partitions.sh生成迁移计划,将故障Broker的分区副本迁移到其他节点。监控指标
kafka.cluster:type=Partition,name=IsrSize)、Leader选举次数(kafka.controller:type=ControllerStats,name=LeaderElectionRateAndTimeMs)、副本同步延迟(kafka.server:type=ReplicaFetcherManager,name=MaxLag);自动化恢复
PodDisruptionBudget确保节点故障时至少有n-1个Broker可用;split-brain-recovery.sh),实现脑裂问题的快速恢复(停止所有节点→清理ZK→有序重启)。