自建 Kafka 迁移到阿里云自建 Kafka 方案

一、适用场景

本方案适用于与它云厂商或 IDC 自建 Kafka 迁移至 阿里云自建 Kafka 场景。

迁移类型适用于:元数据迁移;

二、迁移相关工具介绍

1、MirrorMaker

MirrorMaker 是 Apache Kafka 提供的用于跨集群数据复制的工具,支持两种版本:

  • MirrorMaker 1:通过 kafka-mirror-maker.sh 脚本实现,仅支持消息迁移,不支持元数据同步。

  • MirrorMaker 2:通过 connect-mirror-maker.sh 脚本实现,支持元数据迁移和消息迁移,需依赖 Kafka Connect 框架。

需根据源端 Kafka 版本判断使用哪种 MirrorMaker:若 kafka/bin/ 目录下存在 connect-mirror-maker.sh,则为 MirrorMaker 2;否则为 MirrorMaker 1。

三、迁移方案

1、迁移整体流程

  • 实例创建:在阿里云 ECS 上部署自建 Kafka 集群,完成基础环境配置。

  • 数据迁移:

    • 元数据迁移:通过 MirrorMaker 2 同步 Topic 配置、分区数、副本数、ACL 权限等元数据信息。

  • 数据校验:校验 Topic 数量、分区数、消息数量、消息内容一致性。

2、数据迁移方案

2.1、使用 MirrorMaker

迁移原理:

通过 MirrorMaker 的 Consumer 和 Producer 模块,从源 Kafka 集群拉取消息并写入目标 Kafka 集群,实现数据同步。

前置条件:
  • 源端 Kafka 集群可访问(需开放网络端口)。

  • 目标端 Kafka 集群已部署并运行正常。

  • 确保 MirrorMaker 版本与源端 Kafka 版本兼容。

风险及注意项:
  • 数据迁移过程中需监控网络带宽、磁盘 I/O 及 Kafka 集群负载。

  • 若源端 Kafka 存在未提交的事务消息,需确保事务一致性。

方案优势:
  • 支持全量与增量迁移,满足大规模数据同步需求。

  • 通过配置灵活控制迁移范围(如指定 Topic 白名单)。

3、数据校验方案

3.1、元数据校验

  • 使用 kafka-topics.sh --describe 检查目标集群的 Topic 配置是否与源端一致。

  • 对比分区数、副本数、ACL 权限等元数据信息。

五、实施迁移过程

1、使用阿里云 RocketMQ 控制台迁移工具进行元数据/消息迁移

迁移实施采用 MirrorMaker 进行,该工具在 bin 目录下:kafka-mirror-maker.sh

第一步:配置 consumer 和 provider

迁移的重点在于配置 MirrorMaker 的 Consumer 和 Producer,即 config 文件夹下的consumer.properties、producer.properties 文件。

consumer.properties文件配置如下:

# 注意这里配置的是源端的地址
bootstrap.servers=172.20.77.74:9092 

# consumer group id
group.id=migration-group

auto.offset.reset=earliest

producer.properties 配置如下:

# format: host1:port1,host2:port2 ...
# 注意这里配置的是目标端的地址
bootstrap.servers=172.20.77.91:9092

第二步:执行元数据迁移

配置完成后,执行迁移命令,其中:

--whiteList :需要迁移的topic列表,以逗号分隔

./kafka-mirror-maker.sh --consumer.config ../config/consumer.properties --producer.config ../config/producer.properties --whitelist="migration-to-aliyun"

第三步:监控迁移状态

  • 查看 MirrorMaker 日志(logs/mirror-maker.log)确认无错误。

  • 通过 kafka-topics.sh --list 验证目标集群 Topic 是否创建成功。

六、数据校验过程

1、元数据校验

使用 kafka-topics.sh --describe --zookeeper <zk_host> 对比源端与目标端的 Topic 配置。 验证 ACL 权限是否同步(如 kafka-acls.sh 命令)。

七、迁移注意事项

1、版本兼容性:确保源端与目标端 Kafka 版本兼容,避免因协议差异导致迁移失败。

2、网络连通性:迁移期间需保持源端与目标端网络稳定,避免中断。

3、数据一致性:迁移过程中需避免源端数据变更,或通过增量同步保证一致性。

4、资源预留:迁移期间需预留足够的 CPU、内存和带宽资源,防止性能瓶颈。

5、回滚计划:制定迁移失败时的回滚方案,如保留源端数据并快速恢复业务。