Ubuntu 上 Kafka 数据备份与恢复实操
一、备份方案总览
- 逻辑导出/导入:使用 kafka-dump 做全量导出,或用 kafka-console-consumer.sh / kafka-console-producer.sh 导出为可读文本,适合小规模或跨版本迁移。
- 持续镜像/增量:使用 kafka-backup 做定期增量备份,或用 MirrorMaker 2 在集群间持续镜像,适合生产环境的准实时备份与容灾。
- 底层日志拷贝:直接拷贝 Kafka 日志目录(log.dirs) 的 segment 文件,仅在停机或只读场景下使用,风险高,需严格保证一致性。
- 重要提示:Kafka 并非传统数据库,优先依赖 多副本 + ISR 保障可用性;备份更多用于 迁移、审计、冷备/跨集群容灾。
二、方法一 逻辑导出与导入(全量为主)
- 全量导出(推荐工具)
- 安装工具(若仓库提供):sudo apt-get install kafka-dump
- 执行导出:
kafka-dump --bootstrap-server localhost:9092 --output-dir /data/backup/full_$(date +%F)
- 说明:按主题/分区导出,便于归档与校验。
- 全量导出(无专用工具时的通用法)
- 单主题导出:
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --consumer-property auto.offset.reset=earliest > /data/backup/test.txt
- 批量导出:对所需 topic 循环执行上条命令。
- 全量恢复
- 若使用 kafka-dump 的导出目录:按工具文档进行恢复(不同版本命令可能不同)。
- 若使用文本导出:
kafka-console-producer.sh --broker-list localhost:9092 --topic test < /data/backup/test.txt
- 适用场景:一次性迁移、小数据量、跨版本或跨平台恢复演练。
三、方法二 持续镜像与增量备份(生产推荐)
- 使用 kafka-backup 做定时增量备份
- 安装:sudo apt-get install confluent-kafka-backup
- 首次全量 + 后续增量:
mkdir -p /data/backup/kafka-backup
kafka-backup --bootstrap-server localhost:9092 --backup-dir /data/backup/kafka-backup
- 建议用 cron 每日/每小时执行,保留多份历史(示例见文末脚本)。
- 使用 MirrorMaker 2 做跨集群持续镜像(备份/容灾)
- 准备配置文件 mm2.properties:
name=mm2
clusters=source,backup
source.bootstrap.servers=source-kafka:9092
backup.bootstrap.servers=backup-kafka:9092
source->backup.enabled=true
source->backup.topics=**.*
replication.factor=3
checkpoints.topic.replication.factor=3
offset-syncs.topic.replication.factor=3
- 启动:
bin/connect-mirror-maker.sh mm2.properties
- 适用:长期、准实时的备份/容灾链路,支持双向/多向镜像。
- 适用场景:生产环境、持续保护、跨机房/跨地域容灾。
四、方法三 底层日志目录拷贝(停机/只读场景)
- 适用前提:Broker 停机或只读,且确保 所有副本已同步(ISR),避免拷贝过程中产生新写入。
- 操作步骤:
- 停止 Broker:systemctl stop kafka(或按你的部署方式停止)。
- 同步日志目录:rsync -a /var/lib/kafka/log.dirs/ /backup/kafka-logs-$(date +%F)/
- 备份配置文件:tar czf /backup/kafka-config-$(date +%F).tgz /etc/kafka /opt/kafka/config
- 启动 Broker:systemctl start kafka
- 风险提示:在线拷贝可能导致 segment 不一致/索引错位,一般不推荐用于在线业务。
五、恢复与运维要点
- 恢复顺序建议:先恢复 Topic 配置/ACL/配额(如有),再恢复数据;使用 MirrorMaker 恢复即反向启动镜像链路;使用 kafka-dump 或控制台导入时按主题逐个恢复。
- 一致性建议:恢复前确保目标集群 clean shutdown 或 只读;恢复后校验 消息条数/关键位点。
- 定时与保留:对备份目录做 按日/按周 轮转与异地/离线归档;定期做 恢复演练 验证可用性。
- 配置与元数据:一并备份 server.properties、JAAS/SSL 证书、ACL 配置、Connect/MM2 配置 等。
- 安全与权限:备份传输与落盘使用 最小权限 与 加密(如 TLS、SASL),避免明文落地。
附 常用命令与脚本
- MirrorMaker 2 最小可用配置示例(mm2.properties):
name=mm2
clusters=src,bak
src.bootstrap.servers=src-kafka:9092
bak.bootstrap.servers=bak-kafka:9092
src->bak.enabled=true
src->bak.topics=.*
replication.factor=3
checkpoints.topic.replication.factor=3
offset-syncs.topic.replication.factor=3
- kafka-backup 定时备份脚本(/usr/local/bin/backup_kafka.sh):
#!/usr/bin/env bash
set -e
BK_DIR=“/data/backup/kafka-backup/$(date +%F_%H-%M-%S)”
mkdir -p “$BK_DIR”
/usr/bin/kafka-backup --bootstrap-server localhost:9092 --backup-dir “$BK_DIR”
保留最近 7 天
find /data/backup/kafka-backup -maxdepth 1 -type d -mtime +7 -delete
echo “Backup saved to $BK_DIR”
- Crontab 示例(每日 02:00 增量备份):
0 2 * * * /usr/local/bin/backup_kafka.sh >> /var/log/kafka-backup.log 2>&1
注意:上述操作涉及生产数据与服务可用性,务必先在测试环境验证,并在执行前做好 配置与元数据的完整备份 与 恢复演练。