备份 Kafka 数据需要区分你是想备份 消息数据本身,还是 Kafka 的元数据、配置和状态。Kafka 本身没有像传统数据库那样的“一键备份”,但可以通过多种方式实现不同层级的备份。
下面按 常见场景 给你一个完整说明。
适合:容灾、异地备份
Kafka 自带工具,用于把一个集群的数据实时复制到另一个集群。
原理
示例
# MirrorMaker 2 配置示例
clusters = primary, backup
primary.bootstrap.servers = primary-kafka:9092
backup.bootstrap.servers = backup-kafka:9092
primary->backup.enabled = true
primary->backup.topics = .*
✅ 优点
❌ 缺点
适合:长期归档、离线分析
将 Kafka topic 数据导出到对象存储。
常见架构
Kafka → Kafka Connect → S3 / HDFS / OSS
工具
kafka-connect-s3kafka-connect-hdfs✅ 优点
❌ 缺点
适合:临时备份、小数据量
while (true) {
ConsumerRecords<K, V> records = consumer.poll(Duration.ofMillis(100));
// 写入文件 / DB / 对象存储
}
❌ 不推荐用于生产环境
Kafka 数据默认存储在:
/var/lib/kafka/data
⚠️ 注意
正确做法
Kafka 能否恢复,元数据是关键。
# 备份 ZooKeeper 数据
zkCli.sh
save /path/to/zk-backup
或拷贝:
/var/lib/zookeeper/version-2
备份:
/var/lib/kafka/metadata
至少备份:
server.propertiesproducer.propertiesconsumer.propertiesbroker.idKafka 集群 A(生产)
↓ MirrorMaker 2
Kafka 集群 B(灾备)
✅ 可快速切换
✅ 官方支持
Kafka
├─ MirrorMaker 2 → 灾备集群
└─ Kafka Connect → S3(长期归档)
| 误区 | 说明 |
|---|---|
| 直接拷贝 data 目录 | 可能损坏 |
| 只备份 broker 数据 | 缺少元数据 |
| 认为 Kafka 自带备份 | 实际没有 |
| 只备份 topic 数据 | offset 会丢 |
Kafka 备份 ≠ 拷贝文件
推荐:MirrorMaker 2 做实时备份 + Connect 做冷备
如果你愿意,我可以:
你现在用的是 Kafka 几.x?单集群还是多集群?