在 Ubuntu 上备份 Kafka 数据的实用方案
一 备份方式总览
| 方式 | 适用场景 | 优点 | 局限 |
|---|---|---|---|
| 文件系统拷贝 + 定时任务 | 单集群、本地磁盘备份 | 简单可靠、成本低 | 需停写或依赖复制;恢复时需注意一致性 |
| 导出为日志文件(kafka-console-consumer) | 小数据量、临时导出 | 不依赖停写、易落地 | 仅消息内容,不含配置/ACL;恢复需重建主题 |
| 镜像主题(MirrorMaker 2) | 跨集群/跨机房容灾 | 近实时、持续同步 | 配置复杂;需额外集群容量 |
| 第三方工具(如 kafka-backup) | 需要定期增量与可编排 | 可增量、可脚本化 | 需引入外部依赖与学习成本 |
说明:Kafka 并非传统数据库,原生提供的是复制与高可用能力(如 ISR),备份通常依赖上述工具或复制机制实现。
二 方案一 文件系统拷贝与定时任务(离线/准在线)
#!/usr/bin/env bash
set -e
BACKUP_DIR="/var/backups/kafka"
DATE=$(date +%Y%m%d%H%M%S)
mkdir -p "$BACKUP_DIR/$DATE"
# 建议停写或确保复制充分;此处以停写为例
sudo systemctl stop kafka || { echo "Kafka stop failed"; exit 1; }
tar -czf "$BACKUP_DIR/$DATE/kafka-data-$DATE.tar.gz" -C /var/lib/kafka/data .
sudo systemctl start kafka || { echo "Kafka start failed"; exit 1; }
# 清理7天前备份
find "$BACKUP_DIR" -type f -name 'kafka-data-*.tar.gz' -mtime +7 -delete
chmod +x /usr/local/bin/backup_kafka.sh
crontab -e
# 0 2 * * * /usr/local/bin/backup_kafka.sh >> /var/log/kafka-backup.log 2>&1
sudo systemctl stop kafka
tar -xzf /var/backups/kafka/kafka-data-20251125-020000.tar.gz -C /var/lib/kafka/data
sudo chown -R kafka:kafka /var/lib/kafka/data
sudo systemctl start kafka
三 方案二 导出为日志文件与恢复(不依赖停写)
BACKUP_DIR="/tmp/kafka-backup"
mkdir -p "$BACKUP_DIR"
TOPIC="your_topic"
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic "$TOPIC" \
--from-beginning \
--timeout-ms 5000 \
> "$BACKUP_DIR/${TOPIC}.txt"
kafka-console-producer.sh \
--broker-list localhost:9092 \
--topic "$TOPIC" \
< "$BACKUP_DIR/${TOPIC}.txt"
四 方案三 跨集群镜像与第三方工具(持续/增量)
五 关键注意事项与恢复流程