温馨提示×

怎么备份Linux Kafka数据

小樊
40
2026-08-01 15:08:52
栏目: 智能运维

在 Linux 上备份 Kafka 数据,一般不是像数据库那样“导出一份数据文件”,而是根据 使用场景 选择不同方式。下面按 最常见、最安全、最实用 的顺序给你讲清楚。


一、先明确:Kafka 的“数据”是什么?

Kafka 的数据主要包括:

  1. 消息数据(最核心)
    • 默认路径:/tmp/kafka-logslog.dirs 配置目录
  2. 元数据
    • ZooKeeper(老版本)或 Kafka 内部元数据(新版 KRaft)
  3. 配置信息
    • server.propertiesproducer.properties

二、常见备份方式(按场景选)


✅ 方式一:备份 Kafka 数据目录(最常用)

适用场景

  • 整机迁移
  • 磁盘损坏恢复
  • Kafka 版本升级
  • 快速恢复 Kafka 状态

1️⃣ 停止 Kafka(强烈建议)

# 停止 Kafka
bin/kafka-server-stop.sh

⚠️ 不停止 Kafka 备份,可能导致数据不一致


2️⃣ 找到数据目录

查看 server.properties

grep log.dirs config/server.properties

常见路径:

/var/lib/kafka-logs
/data/kafka-logs

3️⃣ 备份数据目录

tar -czvf kafka-logs-backup-$(date +%F).tar.gz /var/lib/kafka-logs

或同步到远程:

rsync -avz /var/lib/kafka-logs/ user@backup-server:/backup/kafka-logs/

4️⃣ 恢复数据

tar -xzvf kafka-logs-backup-2026-01-21.tar.gz -C /

然后启动 Kafka 即可。

优点

  • 简单
  • 完整

缺点

  • 只能恢复到相同 Kafka 版本
  • 不适合跨集群

✅ 方式二:通过 MirrorMaker 备份(生产环境推荐)

适用场景

  • 跨机房
  • 灾备
  • 多集群同步

原理

从一个 Kafka 集群 实时复制 到另一个 Kafka 集群。


1️⃣ 配置 MirrorMaker

示例(Kafka 自带):

# consumer.properties
bootstrap.servers=source-kafka:9092
group.id=mirror-maker-group

# producer.properties
bootstrap.servers=backup-kafka:9092

2️⃣ 启动 MirrorMaker

bin/kafka-mirror-maker.sh \
  --consumer.config consumer.properties \
  --producer.config producer.properties \
  --whitelist ".*"

优点

  • 实时
  • 高可用
  • 官方推荐

缺点

  • 需要额外集群
  • 配置复杂一点

✅ 方式三:导出消息(逻辑备份)

适用场景

  • 数据量不大
  • 需要长期归档
  • 离线分析

导出消息

bin/kafka-console-consumer.sh \
  --bootstrap-server localhost:9092 \
  --topic test-topic \
  --from-beginning > kafka-backup.json

恢复:

bin/kafka-console-producer.sh \
  --bootstrap-server localhost:9092 \
  --topic test-topic < kafka-backup.json

优点

  • 可读
  • 可跨版本

缺点

  • 不保留 offset / partition 信息

三、ZooKeeper / KRaft 是否需要备份?

ZooKeeper(Kafka 2.x)

tar -czvf zk-backup.tar.gz /var/lib/zookeeper

KRaft(Kafka 3.x+)

KRaft 元数据在 Kafka 数据目录中,备份 log.dirs 即可。


四、推荐的备份策略(实战)

生产环境建议组合:

内容 方式
Kafka 消息 MirrorMaker
数据目录 定期 tar / rsync
配置文件 Git / 手动备份
元数据 随数据目录一起

五、常见坑(非常重要)

不要只备份 topic,不备份 offset不要跨大版本直接恢复数据目录不要在线直接 cp kafka-logs不要忽略磁盘权限


六、快速决策表

需求 最佳方案
快速恢复 备份数据目录
灾备 MirrorMaker
归档 导出消息
升级 数据目录 + 测试

如果你愿意,可以告诉我:

  • Kafka 版本
  • 是否用 ZooKeeper
  • 数据量大小
  • 是单机还是集群

我可以给你 一份完全可执行的备份方案

0