Kafka 在 Linux 上的故障恢复配置指南
一 架构与冗余设计
- 部署至少 3 个 Broker 的集群,避免单点故障;为关键 Topic 设置 replication.factor ≥ 3、partitions 结合消费并发规划,保证在节点宕机时仍能维持可用性。
- 在跨机房或机架感知场景,设置 broker.rack 并优先同机房副本同步,降低网络抖动对 ISR 稳定性的影响。
- 版本选择建议 Kafka ≥ 3.5.1 时优先采用 KRaft 模式(内置元数据管理,减少外部依赖),传统 ZooKeeper 模式需保证其自身高可用(建议 3 节点以上)。
- 防火墙与安全组放行 9092(Kafka)与 2181(ZooKeeper,若使用),确保节点间与客户端可达。
二 Broker 端关键配置
- 数据可靠性与可用性
- 生产者侧:设置 acks=all,保证写入被 ISR 多数副本确认;开启 retries(如 3–5)与退避,容忍瞬时故障。
- Broker 侧:设置 min.insync.replicas=2,即写入需至少 2 个副本确认,低于此值将拒绝写入,避免数据丢失。
- 故障切换与稳定性
- 主题副本数建议 ≥3,分区数按消费并行度设计;在 Leader 切换期间,配合生产者的重试与本地缓冲,降低超时与失败率。
- 存储与容量
- 合理设置 log.retention.hours、log.retention.bytes,避免磁盘写满导致 Broker 停止服务;必要时先清理过期日志或扩容磁盘。
- 机架感知
- 配置 broker.rack,提升跨机房/机架部署时的 ISR 稳定性与恢复速度。
示例 server.properties 片段(关键项)
# 唯一标识每个 Broker
broker.id=<唯一ID>
# 监听与对外地址(按实际网卡与域名填写)
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://<本机可访问IP>:9092
# 存储路径(确保目录存在且权限正确)
log.dirs=/var/log/kafka
# 可靠性:写入需多数副本确认
min.insync.replicas=2
# 主题默认副本因子(创建 Topic 时可覆盖)
default.replication.factor=3
# 机架感知(跨机房部署时建议配置)
broker.rack=rack1
三 客户端容错配置
- 生产者
- 使用 acks=all、合理的 retries 与 retry.backoff.ms(如 1000 ms),并启用适度的本地缓冲,减少 Leader 切换期间的失败与阻塞。
- 消费者
- 处理时间较长时,适当增大 session.timeout.ms 与 max.poll.interval.ms,减少因心跳超时被误判下线;
- 为降低重启后的重复处理,优先采用 手动提交 Offset(处理完成后同步提交),或缩短 auto.commit.interval.ms(如 1000 ms)。
四 进程与系统层高可用
- systemd 自恢复
- 使用 systemd 托管 Kafka,配置 Restart=on-failure、RestartSec=10,并合理设置 Type(如 forking)、SuccessExitStatus、LimitNOFILE(如 65536),确保异常退出能自动拉起并具备足够的文件句柄。
- 启动失败快速排查
- 查看服务日志:journalctl -u kafka -n 100 --no-pager;
- 检查 Kafka 日志:tail -f /var/log/kafka/server.log;
- 手动运行启动脚本观察输出,排查 ZooKeeper 连接、端口冲突、内存/磁盘 等资源问题。
- 常见故障点
- ZooKeeper 未就绪或连接失败、log.dirs 目录不存在/权限不足、9092 端口被占用 等,都会导致启动失败或反复重启,需优先修复。
五 验证与演练
- 集群健康检查
- 创建测试 Topic:
- KRaft:
./bin/kafka-topics.sh --create --bootstrap-server <任一节点IP>:9092 \
--replication-factor 3 --partitions 3 --topic test-topic
- ZooKeeper:
./bin/kafka-topics.sh --create --zookeeper <ZK地址>:2181 \
--replication-factor 3 --partitions 3 --topic test-topic
- 查看分区与副本分布:
./bin/kafka-topics.sh --describe --bootstrap-server <任一节点IP>:9092 --topic test-topic
- 端到端生产消费验证:
# 生产
./bin/kafka-console-producer.sh --bootstrap-server <任一节点IP>:9092 --topic test-topic
# 消费
./bin/kafka-console-consumer.sh --bootstrap-server <任一节点IP>:9092 --topic test-topic --from-beginning
- 故障演练
- 有序停止 1 台 Broker,观察 Leader 切换、ISR 变化与消息生产是否受影响;
- 恢复该 Broker,确认 分区重新均衡 与数据同步完成;
- 模拟网络抖动/长处理场景,验证生产者的 重试 与消费者的 会话/轮询超时 配置有效性。