在 Linux 环境下,Kafka 的“备份”一般分两种理解:消息数据备份(数据容灾) 和 配置文件/数据目录备份(运维备份)。下面分别说明。
Kafka 本身通过 副本(Replication) 来保证数据安全,不需要像数据库那样手动备份。
在创建 Topic 时指定副本数:
bin/kafka-topics.sh \
--create \
--topic test-topic \
--partitions 3 \
--replication-factor 3 \
--bootstrap-server localhost:9092
replication-factor >= 3 可容忍 2 个节点故障查看副本状态:
bin/kafka-topics.sh --describe --topic test-topic --bootstrap-server localhost:9092
如果是跨机房/跨集群备份,使用 Kafka MirrorMaker:
bin/kafka-mirror-maker.sh \
--consumer.config consumer.properties \
--producer.config producer.properties \
--whitelist ".*"
如果你是想备份 Kafka 存储的数据文件(不推荐日常使用,仅用于迁移或极端容灾):
systemctl stop kafka
# 或
bin/kafka-server-stop.sh
默认数据目录:
/var/lib/kafka/data # 或 server.properties 中 log.dirs
备份:
tar -czvf kafka-data-backup.tar.gz /var/lib/kafka/data
或 rsync:
rsync -avz /var/lib/kafka/data /backup/kafka-data/
systemctl stop kafka
rm -rf /var/lib/kafka/data/*
tar -xzvf kafka-data-backup.tar.gz -C /
systemctl start kafka
⚠️ 注意:直接拷贝数据目录容易因 offset / 集群 ID 不一致导致问题。
Kafka 运维一定要备份配置:
/etc/kafka/
/opt/kafka/config/
示例:
tar -czvf kafka-config-backup.tar.gz /etc/kafka
适合小数据量或审计:
bin/kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic test-topic --from-beginning > backup.json
恢复:
bin/kafka-console-producer.sh \
--bootstrap-server localhost:9092 \
--topic test-topic < backup.json
| 场景 | 推荐方式 |
|---|---|
| 防止消息丢失 | 副本 + ISR |
| 跨机房容灾 | MirrorMaker |
| 运维配置 | 定期备份 config |
| 迁移/恢复 | 停止后备份 log.dirs |
| 小量导出 | console-consumer |
如果你能说明:
我可以给你一套具体可执行的备份脚本。