Debian 上 Kafka 备份与恢复实操指南
一 备份策略与准备
- 明确运行模式:确认是 ZooKeeper 还是 KRaft 模式,二者的元数据备份方式不同。
- 确定数据目录:在 server.properties 中查看 log.dirs(常见路径如 /var/lib/kafka/data),备份需覆盖所有 Broker 的日志目录。
- 元数据与配置:同时备份 /etc/kafka 配置;ZooKeeper 模式需备份 ZooKeeper 数据目录(常见 /var/lib/zookeeper),KRaft 模式需关注 __cluster_metadata 日志。
- 影响与窗口:离线备份需停写,在线备份需控制对业务的影响(限速、低峰期、副本容错)。
- 保留与合规:结合 log.retention.hours / log.retention.bytes 与业务 RPO/RTO 制定周期与保留策略。
二 方法一 离线物理备份与恢复(停机,最稳妥)
- 适用场景:Broker 磁盘故障、目录损坏、版本升级回滚、全量迁移。
- 备份步骤:
- 停止 Kafka:sudo systemctl stop kafka
- 备份数据与配置:
sudo tar -czvf kafka_data_$(date +%F).tar.gz /var/lib/kafka
sudo tar -czvf kafka_config_$(date +%F).tar.gz /etc/kafka
- 如为 ZooKeeper:sudo tar -czvf zookeeper_$(date +%F).tar.gz /var/lib/zookeeper
- 将备份拷贝到安全位置(异地/对象存储)
- 启动 Kafka:sudo systemctl start kafka
- 恢复步骤:
- 停止 Kafka:sudo systemctl stop kafka
- 清空或重命名损坏的数据目录(谨慎操作,先确认备份可用)
- 解压恢复:
sudo tar -xzvf kafka_data_YYYY-MM-DD.tar.gz -C /
sudo tar -xzvf kafka_config_YYYY-MM-DD.tar.gz -C /
(ZooKeeper 同理)
- 修正权限(以实际运行用户为准,常见为 kafka:kafka):
sudo chown -R kafka:kafka /var/lib/kafka /var/lib/zookeeper
- 启动 Kafka:sudo systemctl start kafka
- 验证:列出 Topic、检查分区与副本、抽样消费验证数据。
三 方法二 在线逻辑备份与恢复(不停机,按 Topic/时间窗口)
- 适用场景:按 Topic 导出、跨集群迁移、误删少量消息回滚、开发/测试环境快速拉数。
- 全量导出单个 Topic:
BACKUP_TOPIC=test
BACKUP_DIR=/tmp/backup
mkdir -p $BACKUP_DIR
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic $BACKUP_TOPIC --from-beginning --timeout-ms 60000 > $BACKUP_DIR/$BACKUP_TOPIC.txt
- 全量导入:
RESTORE_TOPIC=test
BACKUP_FILE=$BACKUP_DIR/$RESTORE_TOPIC.txt
kafka-console-producer.sh --broker-list localhost:9092 --topic $RESTORE_TOPIC --new-producer < $BACKUP_FILE
- 批量/多 Topic:脚本化循环调用;大 Topic 建议分批按时间窗口导出,避免单文件过大与超时。
- 注意:该方式依赖可重放语义,压缩/序列化格式需与业务消费端兼容;不建议作为唯一灾备手段。
四 方法三 增量与异地容灾(持续保护,低 RPO)
- MirrorMaker 2(跨集群复制,适合灾备/演练/迁移):
- 准备源/目的集群地址与复制白名单/正则
- 使用 Kafka Connect 部署 MirrorMaker 2(推荐)或命令行工具,配置 source->dest 复制任务,按需设置 topics、复制因子、检查点等
- 监控复制延迟与 Lag,定期演练切换
- 专用备份工具 kafka-backup(若仓库提供该包):
- 安装:sudo apt-get install confluent-kafka-backup
- 备份:kafka-backup --bootstrap-server localhost:9092 --backup-dir /backups/kafka(可配合 cron 定时)
- 恢复:按工具文档执行(通常涉及停写、清理目标目录、导入、校验)
- 对象存储落地:结合 Kafka Connect S3 Sink 或 MirrorMaker 2 将 Topic 持续导出到 S3/GCS,实现低成本长期留存与异地恢复。
五 元数据备份与恢复要点
- ZooKeeper 模式:定期导出关键 znode(如 /kafka/config/topics、/kafka/brokers 等),发生故障时用于恢复 Topic 配置与集群元数据。
- KRaft 模式:重点备份 __cluster_metadata 日志(可使用 kafka-dump-log.sh 工具导出校验),恢复时确保该日志完整一致。
- 一致性校验:恢复后使用 kafka-topics.sh 与 kafka-consumer-groups.sh 校验分区与消费者组状态。