在 Debian 下迁移 Kafka 数据,通常分为同机迁移(目录变更)和跨机迁移(节点/集群迁移)两种场景。下面按常见需求给你一套可操作的迁移方案,并说明注意事项。
查看 server.properties:
grep "log.dirs" /etc/kafka/server.properties
常见路径:
/var/lib/kafka/data
/tmp/kafka-logs
systemctl stop kafka
⚠ 一定要先停 Kafka,否则数据可能损坏。
rsync -avp /var/lib/kafka/data/ /new/path/kafka-data/
vim /etc/kafka/server.properties
修改:
log.dirs=/new/path/kafka-data
chown -R kafka:kafka /new/path/kafka-data
systemctl start kafka
✅ 数据完整,offset 不变
适合:
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
}
kafka-reassign-partitions.sh \
--bootstrap-server localhost:9092 \
--reassignment-json-file plan.json \
--execute
kafka-reassign-partitions.sh \
--bootstrap-server localhost:9092 \
--reassignment-json-file plan.json \
--verify
✅ 官方推荐方式 ✅ 不停机 ✅ 数据一致性最好
systemctl stop kafka
rsync -avp /var/lib/kafka/data/ target:/data/kafka/
vim /etc/kafka/server.properties
⚠ broker.id 必须保持不变
systemctl start kafka
⚠ 风险:
若使用 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
确认:
会导致 Kafka 无法启动
chown -R kafka:kafka /data/kafka
建议用
log.dirs而不是挂载点
| 场景 | 推荐方式 |
|---|---|
| 同机换盘 | rsync + 改配置 |
| 扩容 / 节点迁移 | 分区重分配 ✅ |
| 重建集群 | 冷迁移 |
| 生产环境 | 分区重分配 |
如果你愿意,可以告诉我:
我可以给你精确到命令级别的迁移方案。