在 Linux 环境下迁移 Kafka 数据,常见场景有 同集群分区数据迁移、跨集群数据迁移、磁盘/目录迁移、 broker 节点迁移 等。下面按最常见、最稳妥的方式给你系统讲一遍。
Kafka 提供 kafka-reassign-partitions.sh
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 reassign.json \
--execute
bin/kafka-reassign-partitions.sh \
--bootstrap-server localhost:9092 \
--reassignment-json-file reassign.json \
--verify
✅ 优点:官方支持、不停机
❌ 缺点:只迁移 metadata + 数据副本
适合 灾备 / 多机房 / 集群升级
bin/kafka-mirror-maker.sh \
--consumer.config consumer.properties \
--producer.config producer.properties \
--whitelist "test-topic"
consumer.properties
bootstrap.servers=source:9092
group.id=mirror
producer.properties
bootstrap.servers=target:9092
✅ 支持实时同步
❌ 不保证 exactly-once(默认 at-least-once)
仅适合 测试 / 离线
scp -r /data/kafka/logs/test-topic-* target:/data/kafka/logs/
⚠ 风险:
systemctl stop kafka
cp -a /old/kafka /new/kafka
log.dirs=/new/kafka
systemctl start kafka
✅ 简单
❌ 必须停服
broker-list 中移除旧 brokerkafka-reassign-partitions.sh✅ 确保:
offsets.topic.replication.factor ≥ 3✅ 常用监控命令:
bin/kafka-consumer-groups.sh \
--bootstrap-server localhost:9092 \
--describe --group mirror
| 场景 | 推荐方案 |
|---|---|
| 同集群扩容 | reassign-partitions |
| 跨机房 | MirrorMaker |
| 测试迁移 | 拷贝目录 |
| 磁盘更换 | 停服拷贝 |
如果你能告诉我:
我可以给你 具体可执行的迁移脚本。