在 Ubuntu 上迁移 Kafka 数据,通常分为同一机器目录迁移、机器间迁移(集群扩容/缩容)、以及使用 MirrorMaker 跨集群迁移几种场景。下面按常见需求说明。
适用于:磁盘满了、换盘、调整 log.dirs
sudo systemctl stop kafka
# 或
<kafka_dir>/bin/kafka-server-stop.sh
编辑 server.properties
log.dirs=/new/path/kafka-logs
cp -rp /old/path/kafka-logs /new/path/kafka-logs
sudo systemctl start kafka
✅ 注意:
mv 正在运行的 Kafka适用于:换机器、节点下线
bin/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
}
bin/kafka-reassign-partitions.sh \
--bootstrap-server localhost:9092 \
--reassignment-json-file reassignment.json \
--execute
bin/kafka-reassign-partitions.sh \
--bootstrap-server localhost:9092 \
--reassignment-json-file reassignment.json \
--verify
✅ 优点:不影响业务、零停机
适用于:机房迁移、灾备
bin/kafka-mirror-maker.sh \
--consumer.config consumer.properties \
--producer.config producer.properties \
--whitelist ".*"
consumer.properties
bootstrap.servers=source:9092
producer.properties
bootstrap.servers=target:9092
✅ 注意:
仅限测试环境
scp -r /var/lib/kafka /target-server:/var/lib/
要求:
❌ 直接删 log.dirs 会导致数据丢失
❌ 不同 broker.id 拷贝数据无法启动
❌ 迁移中 topic 正在写会不一致
| 场景 | 推荐方式 |
|---|---|
| 换磁盘 | 改 log.dirs + 拷贝 |
| 节点下线 | Reassign Partition |
| 跨集群 | MirrorMaker |
| 测试 | 文件拷贝 |
如果你能告诉我:
我可以给你精确命令。