温馨提示×

linux kafka怎样迁移数据

小樊
33
2026-10-25 20:19:45
栏目: 智能运维

在 Linux 环境下迁移 Kafka 数据,常见场景有 同集群分区数据迁移、跨集群数据迁移、磁盘/目录迁移、 broker 节点迁移 等。下面按最常见、最稳妥的方式给你系统讲一遍。


一、同集群内数据迁移(扩容 / 缩容 / 均衡)

1️⃣ 使用 Kafka 自带工具(推荐)

Kafka 提供 kafka-reassign-partitions.sh

(1)生成迁移计划

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
}

(2)执行迁移

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

(3)查看进度

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

✅ 优点:官方支持、不停机
❌ 缺点:只迁移 metadata + 数据副本


二、跨集群数据迁移(最常见)

方案 1:MirrorMaker(官方)

适合 灾备 / 多机房 / 集群升级

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)


方案 2:直接拷贝数据目录(不推荐生产)

仅适合 测试 / 离线

scp -r /data/kafka/logs/test-topic-* target:/data/kafka/logs/

⚠ 风险:

  • offset 不一致
  • 集群 UUID 冲突
  • 需停 broker

三、Kafka 数据目录 / 磁盘迁移

步骤(不停机方案有限)

  1. 停止 broker
systemctl stop kafka
  1. 拷贝数据
cp -a /old/kafka /new/kafka
  1. 修改配置
log.dirs=/new/kafka
  1. 启动
systemctl start kafka

✅ 简单
❌ 必须停服


四、Broker 节点迁移(下线旧机器)

  1. 从 broker-list 中移除旧 broker
  2. 使用 kafka-reassign-partitions.sh
  3. 确认副本已全部迁出
  4. 停止旧 broker

五、迁移注意事项(非常重要)

✅ 确保:

  • offsets.topic.replication.factor ≥ 3
  • 网络带宽充足
  • 迁移期间监控 Lag

✅ 常用监控命令:

bin/kafka-consumer-groups.sh \
  --bootstrap-server localhost:9092 \
  --describe --group mirror

六、总结选型

场景 推荐方案
同集群扩容 reassign-partitions
跨机房 MirrorMaker
测试迁移 拷贝目录
磁盘更换 停服拷贝

如果你能告诉我:

  • Kafka 版本
  • 是否跨集群
  • 是否可停服
  • 数据量大小

我可以给你 具体可执行的迁移脚本。

0 踩