本文介绍 RocketMQ 业务迁移的操作步骤,您可以参考本文档将自建 RocketMQ 集群或其他云厂商 RocketMQ 集群迁移至火山引擎消息队列 RocketMQ版。
注意事项
- 业务迁移之前,请确认您已根据业务需求选择了对应迁移方案。迁移方案对比请参见迁移概述。
- 由于 Producer 和 Consumer 为集群化部署,迁移时可以分批操作,上层业务无感知。
- 分批迁移过程中,可以在火山引擎云监控服务控制台监控业务相关流量数据,确认业务正常运行。
- 如果有多个 RocketMQ 实例需要迁移到同一个消息队列 RocketMQ版实例中,请依次进行迁移。
- 如果使用延时消息,建议将旧实例消费端保存 3 天或更长时间。
- 业务迁移只迁移消息生产和消费链路,并不会迁移 RocketMQ 旧集群上的消息数据。
1 环境准备
迁移之前,您需要根据业务量合理评估资源需求,并创建 RocketMQ 实例及相关的依赖资源。
1.1 迁移评估
根据现有业务量和消息量估算所需的消息队列 RocketMQ版资源,例如 Topic 个数、生产和消费的消息量、TPS 峰值等。不同规格的 RocketMQ 实例代表不同的计算能力及存储空间,请根据业务量合理评估资源需求。
1.2 准备相关资源
确认资源需求之后,还需要为 RocketMQ 准备以下相关资源。
- 火山引擎消息队列 RocketMQ版目前仅支持私有网络访问,迁移后您的服务需要和 RocketMQ 实例处于相同的区域(Region)和 VPC 内,才能正常访问实例。详细操作步骤,请参见创建私有网络。
- 在连接 RocketMQ 实例之前,您需要先购买 ECS 云服务器,安装 JDK 以及配置环境变量。详细操作步骤,请参见购买云服务器。
- 请根据业务量评估结果合理选择 RocketMQ 实例的计算规格和存储规格,保证资源充足。详细操作步骤,请参见创建实例。
- 消息队列 RocketMQ版支持 ACL 权限管理,完全兼容 RocketMQ 的所有的内置权限策略。您需要在 RocketMQ 控制台中创建密钥对,并妥善保管AccessKey ID,AccessKey Secret。详细操作步骤,请参见创建密钥。
2 迁移元数据
将开源 RocketMQ 的 Topic 和 Group 的配置信息迁移到消息队列 RocketMQ版的新实例中,包括 Topic 名称、队列个数和权限在内的配置信息均需要迁移。迁移元数据时,并不会迁移 Topic 中的消息数据。
您可以在原 RocketMQ 集群的 WebUI 控制台或云控制台中查看并收集相关元数据,并手动创建相关 Topic 和 Group 配置。
在迁移元数据的步骤中,您需要获取的元数据包括以下几种。
3 迁移消息服务
手动修改生产者集群和消费者集群的接入信息,将消息生产者集群和消费者集群的节点连接到云上的消息队列 RocketMQ版实例,实现所有的消息收发业务都在消息队列 RocketMQ版实例上进行,完成消息收发链路的平滑迁移。
说明
建议分批进行迁移,且先迁移部分消息消费集群,保证新实例具备消费能力,再迁移部分消息生产集群,确认业务运行稳定后再迁移剩余流量。新旧生产端和消费端并行运行,待旧集群的存量消息被旧消费端消费完成后,再下线旧生产端和旧消费端。
推荐迁移步骤如下。
3.1 切换部分消费者节点
- 将部分消费客户端的元数据连接地址改为消息队列 RocketMQ版新实例的元数据连接地址,重启消费业务,消费者从新 RocketMQ 实例中消费消息,将这部分消费者接入到云上的消息队列 RocketMQ版。
- 切换的这部分消费者将消费消息队列 RocketMQ版集群中的消息,剩余消费者继续消费旧 RocketMQ 集群中的消息。
- 您可以模拟生产一些消息,验证新的消息通路是否已打通。
3.2 切换部分生产者节点
- 将部分生产客户端的元数据连接地址改为消息队列 RocketMQ版实例的元数据连接地址,重启生产业务,生产者将新的消息发送到新 RocketMQ 实例中,将这部分生产者接入到云上消息队列 RocketMQ版。
- 切换的这部分生产者将发送消息到消息队列 RocketMQ版实例中;剩余的生产者还是将消息发送到旧 RocketMQ 集群中。
- 在火山引擎云监控中确认新实例消息生产和消费速率、确认是否有消息堆积。
- 查看速率:建议通过主题页签下的消息生产速率指标和消费组页签下的Topic消费速率指标进行判断,如果两个指标数据基本持平,表示消息生产与消费速率持平,业务流量平稳。
- 检查消息堆积:消费组页签下的Topic可消费消息数尽量小即可。
-
3.3 多批灰度切换
在首批切换验证正常后,分多批重复执行“切换部分消费者 → 切换对应生产者”的流程,逐步扩大灰度范围,每批切换后观察监控指标稳定再继续下一批。
3.4 切换剩余消费者节点
- 通过 RocketMQ 旧集群中的消息堆积量判断消息是否消费完成,确保旧集群中的消息已全部消费完,否则可能会导致部分消息未消费。您可以通过旧 RocketMQ 控制台查看消费组页签下的 Topic 可消费消息数,当堆积量为 0 时表示消息已消费完成。
4 确认迁移结果
分批迁移过程中、完成全部的生产者和消费者节点迁移之后,建议在火山引擎云监控服务控制台监控新实例和旧实例的生产和消费相关状态与流量数据,确认消息通路已成功迁移至新实例,确保业务正常运行。
您可以通过以下方式判断流量的分发情况:
- 旧集群:生产写入速率为 0,消息消费速率为 0,消息堆积为 0。
-