一、适用场景
本方案适用于与它云厂商或 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、回滚计划:制定迁移失败时的回滚方案,如保留源端数据并快速恢复业务。