温馨提示×

如何备份debian kafka

小樊
40
2026-10-12 16:57:36
栏目: 智能运维

在 Debian 上备份 Kafka,通常分为 元数据备份(ZooKeeper / KRaft)、Topic 配置备份 和 消息数据备份 三部分。下面按常见场景说明(以 Kafka 2.x/3.x 为例)。


一、备份前准备

1. 停止写入(可选但推荐)

如果是生产环境,建议在低峰期操作,或短暂停产:

  • 停止 Producer
  • 或暂停消费组(视业务而定)

2. 确认 Kafka 安装路径

常见路径:

/opt/kafka
/usr/local/kafka
/etc/kafka
/var/lib/kafka

二、备份 Kafka 配置

1. 备份 Kafka 配置文件

tar czf kafka-config-$(date +%F).tar.gz \
  /etc/kafka \
  /opt/kafka/config

常见重要文件:

  • server.properties
  • producer.properties
  • consumer.properties
  • zookeeper.properties(如用 ZK)
  • kraft/server.properties(KRaft 模式)

三、备份 Topic 与消费进度(元数据)

1. 使用 kafka-topics.sh 导出 Topic 配置

kafka-topics.sh --bootstrap-server localhost:9092 \
  --list > topics.txt

while read t; do
  kafka-configs.sh --bootstrap-server localhost:9092 \
    --entity-type topics --entity-name $t --describe
done < topics.txt > topic-configs.txt

2. 备份消费组 offset(ZooKeeper 模式)

zookeeper-shell.sh localhost:2181 <<EOF
ls /consumers
get /consumers
EOF

KRaft 模式可用:

kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list

四、备份 Kafka 消息数据(核心)

⚠️ 注意

Kafka 数据不能直接简单复制如果服务在运行,可能导致数据损坏。

方法 1:停机冷备(最安全)

systemctl stop kafka

备份数据目录:

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

重启:

systemctl start kafka

方法 2:运行时镜像备份(推荐生产)

使用 LVM / 快照:

lvcreate --size 10G --snapshot --name kafka-snap /dev/vg0/kafka
mount /dev/vg0/kafka-snap /mnt/snap
tar czf kafka-data.tar.gz /mnt/snap
umount /mnt/snap
lvremove /dev/vg0/kafka-snap

方法 3:逻辑备份(跨集群)

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

恢复:

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

五、ZooKeeper 备份(如使用)

systemctl stop zookeeper
tar czf zk-data-$(date +%F).tar.gz /var/lib/zookeeper
systemctl start zookeeper

六、自动化备份示例(crontab)

0 2 * * * /opt/backup/kafka-backup.sh

七、恢复 Kafka 数据

  1. 停止 Kafka
  2. 解压数据到原目录
  3. 恢复配置
  4. 启动 Kafka

八、最佳实践建议

  • ✅ 定期备份 Topic 配置
  • ✅ 使用副本 + 跨机房同步
  • ✅ 重要数据用 MirrorMaker2
  • ❌ 不要直接 cp 运行中的 log 目录

如果你能提供:

  • Kafka 版本
  • 是否用 ZooKeeper / KRaft
  • 单节点 or 集群

我可以给你定制备份脚本。

0 踩