Kafka在Debian上的备份与恢复方法
一、方法总览与选择
| 方法 | 适用场景 | 关键工具 | 优点 | 局限 |
|---|---|---|---|---|
| 主题级导出/导入 | 少量主题、开发/测试、临时回放 | kafka-console-consumer.sh / kafka-console-producer.sh | 简单直观、无需额外组件 | 仅导消息体,不保留key/timestamp/headers,对压缩/事务/幂等支持有限,吞吐受客户端影响 |
| 集群级镜像 | 持续灾备、跨集群迁移、近实时同步 | MirrorMaker 2(MM2) | 持续增量、可双向/多向、保留元数据 | 需额外集群/资源,配置与监控要求更高 |
| 文件系统快照 | 停机窗口可安排、追求物理一致性 | tar + 存储快照(LVM/ZFS) | 快速、包含日志段与索引 | 需停写或借助日志截断点,恢复需严格一致性校验 |
| 专用备份工具 | 定期增量、统一调度、可编排 | kafka-backup(Confluent)等 | 增量、可脚本化、便于纳入备份体系 | 需引入第三方组件与权限管理 |
二、按主题的备份与恢复(导出/导入)
BACKUP_TOPIC=test
BACKUP_DIR=/tmp/backup
mkdir -p "$BACKUP_DIR"
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic "$BACKUP_TOPIC" \
--from-beginning \
--formatter kafka.tools.DefaultMessageFormatter \
--property print.key=true \
--property print.value=true \
--property key.separator="|" \
--consumer-property auto.offset.reset=earliest \
> "$BACKUP_DIR/${BACKUP_TOPIC}.txt"
RESTORE_TOPIC=test
PARTITIONS=3
REPLICATION_FACTOR=3
kafka-topics.sh --create \
--topic "$RESTORE_TOPIC" \
--bootstrap-server localhost:9092 \
--partitions "$PARTITIONS" \
--replication-factor "$REPLICATION_FACTOR"
kafka-console-producer.sh \
--broker-list localhost:9092 \
--topic "$RESTORE_TOPIC" \
--new-producer \
--property parse.key=true \
--property key.separator="|" \
< "$BACKUP_DIR/${RESTUP_TOPIC}.txt"
三、集群级镜像与持续备份(MirrorMaker 2)
# mm2.properties
clusters = source, backup
source.bootstrap.servers = source-broker1:9092,source-broker2:9092
backup.bootstrap.servers = backup-broker1:9092,backup-broker2:9092
# 复制规则:将 source 的所有主题镜像到 backup(可按需细化正则)
source->backup.enabled = true
source->backup.topics = .*
# 其他建议参数
replication.factor = 3
checkpoints.topic.replication.factor = 3
offset-syncs.topic.replication.factor = 3
/opt/confluent/bin/kafka-mirror-maker.sh \
--consumer.config /opt/confluent/etc/kafka/backup-consumer.properties \
--producer.config /opt/confluent/etc/kafka/backup-producer.properties \
--config mm2.properties
四、文件系统级备份与恢复(停机快照)
sudo systemctl stop kafka
sudo tar -czvf /backups/kafka_data_$(date +%F).tar.gz /var/lib/kafka/data
sudo tar -czvf /backups/kafka_config_$(date +%F).tar.gz /etc/kafka
# 如使用 ZooKeeper
sudo tar -czvf /backups/zookeeper_data_$(date +%F).tar.gz /var/lib/zookeeper
sudo systemctl start kafka
sudo systemctl stop kafka
sudo rm -rf /var/lib/kafka/data/*
sudo tar -xzvf /backups/kafka_data_YYYY-MM-DD.tar.gz -C /
sudo tar -xzvf /backups/kafka_config_YYYY-MM-DD.tar.gz -C /
sudo systemctl start kafka
五、实践建议与注意事项