温馨提示×

Debian下Kafka如何迁移数据

小樊
46
2026-07-23 17:52:49
栏目: 智能运维

在 Debian 下迁移 Kafka 数据,通常分为同机迁移(目录变更)跨机迁移(节点/集群迁移)两种场景。下面按常见需求给你一套可操作的迁移方案,并说明注意事项。


一、迁移前准备

1. 确认 Kafka 数据目录

查看 server.properties

grep "log.dirs" /etc/kafka/server.properties

常见路径:

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

2. 停止 Kafka

systemctl stop kafka

⚠ 一定要先停 Kafka,否则数据可能损坏。


二、同机迁移(目录迁移)

场景

  • 磁盘空间不足
  • 更换数据盘

步骤

1. 复制数据(保留权限)

rsync -avp /var/lib/kafka/data/ /new/path/kafka-data/

2. 修改 Kafka 配置

vim /etc/kafka/server.properties

修改:

log.dirs=/new/path/kafka-data

3. 确认目录权限

chown -R kafka:kafka /new/path/kafka-data

4. 启动 Kafka

systemctl start kafka

✅ 数据完整,offset 不变


三、跨机 / 跨节点迁移(推荐方式)

✅ 推荐方案:Kafka 分区重分配(最安全)

适合:

  • 扩容
  • 节点下线
  • 更换机器

1. 生成迁移计划

kafka-reassign-partitions.sh \
  --bootstrap-server localhost:9092 \
  --topics-to-move-json-file topics.json \
  --broker-list "1,2,3" \
  --generate

topics.json 示例:

{
  "topics": [
    { "topic": "test-topic" }
  ],
  "version": 1
}

2. 执行迁移

kafka-reassign-partitions.sh \
  --bootstrap-server localhost:9092 \
  --reassignment-json-file plan.json \
  --execute

3. 查看进度

kafka-reassign-partitions.sh \
  --bootstrap-server localhost:9092 \
  --reassignment-json-file plan.json \
  --verify

官方推荐方式 ✅ 不停机 ✅ 数据一致性最好


四、跨机冷迁移(不推荐但可用)

场景

  • 集群重建
  • 数据量不大

步骤

1. 旧节点停止 Kafka

systemctl stop kafka

2. 拷贝数据

rsync -avp /var/lib/kafka/data/ target:/data/kafka/

3. 新节点修改 broker.id

vim /etc/kafka/server.properties

broker.id 必须保持不变

4. 启动 Kafka

systemctl start kafka

⚠ 风险:

  • controller 可能异常
  • 需要 Zookeeper / KRaft 元数据一致

五、KRaft 模式(无 Zookeeper)注意事项

若使用 KRaft:

vim /etc/kafka/server.properties

确认:

node.id=1
log.dirs=/data/kafka

迁移时:

  • node.id 不能变
  • meta.properties 必须一起拷贝

六、迁移后检查

kafka-topics.sh --bootstrap-server localhost:9092 --list
kafka-topics.sh --bootstrap-server localhost:9092 --describe

确认:

  • 分区数量
  • leader
  • ISR

七、常见问题

❌ broker.id 不一致

会导致 Kafka 无法启动

❌ 权限错误

chown -R kafka:kafka /data/kafka

❌ 磁盘 UUID 变化

建议用 log.dirs 而不是挂载点


八、总结建议

场景 推荐方式
同机换盘 rsync + 改配置
扩容 / 节点迁移 分区重分配 ✅
重建集群 冷迁移
生产环境 分区重分配

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

  • Kafka 版本
  • 是否使用 KRaft
  • 是单节点还是集群

我可以给你精确到命令级别的迁移方案

0