本文介绍 RocketMQ 业务迁移的操作步骤,您可以参考本文档将自建 RocketMQ 集群或其他云厂商 RocketMQ 集群迁移至火山引擎消息队列 RocketMQ 版。
- 业务迁移之前,请确认您已根据业务需求选择了对应迁移方案。迁移方案对比请参见迁移概述。
- 由于 Producer 和 Consumer 为集群化部署,迁移时可以分批操作,上层业务无感知。
- 分批迁移过程中,可以在火山引擎云监控服务控制台监控业务相关流量数据,确认业务正常运行。
- 如果有多个 RocketMQ 实例需要迁移到同一个消息队列 RocketMQ 版实例中,请依次进行迁移。
- 如果使用延时消息,建议将旧实例消费端保存 3 天或更长时间。
- 业务迁移只迁移消息生产和消费链路,并不会迁移 RocketMQ 旧集群上的消息数据。
迁移之前,您需要根据业务量合理评估资源需求,并创建 RocketMQ 实例及相关的依赖资源。
根据现有业务量和消息量估算所需的消息队列 RocketMQ 版资源,例如 Topic 个数、生产和消费的消息量、TPS 峰值等。不同规格的 RocketMQ 实例代表不同的计算能力及存储空间,请根据业务量合理评估资源需求。
确认资源需求之后,还需要为 RocketMQ 准备以下相关资源。
- 火山引擎消息队列 RocketMQ 版目前仅支持私有网络访问,迁移后您的服务需要和 RocketMQ 实例处于相同的区域(Region)和 VPC 内,才能正常访问实例。详细操作步骤,请参见创建私有网络。
- 在连接 RocketMQ 实例之前,您需要先购买 ECS 云服务器,安装 JDK 以及配置环境变量。详细操作步骤,请参见购买云服务器。
- 请根据业务量评估结果合理选择 RocketMQ 实例的计算规格和存储规格,保证资源充足。详细操作步骤,请参见创建实例。
- 消息队列 RocketMQ 版支持 ACL 权限管理,完全兼容 RocketMQ 的所有内置权限策略。您需要在 RocketMQ 控制台中创建密钥对,并妥善保管 AccessKey ID 和 AccessKey Secret。详细操作步骤,请参见创建密钥。
将开源 RocketMQ 的 Topic 和 Group 的配置信息迁移到消息队列 RocketMQ 版的新实例中,包括 Topic 名称、队列个数和权限在内的配置信息均需要迁移。迁移元数据时,并不会迁移 Topic 中的消息数据。
您可以在原 RocketMQ 集群的 WebUI 控制台或云控制台中查看并收集相关元数据,并手动创建相关 Topic 和 Group 配置。
在迁移元数据的步骤中,您需要获取的元数据包括以下几种。
本方案仅切换消息的生产与消费链路,不迁移历史消息数据。为保证顺序消息的稳定迁移,采用“先切生产、后切消费、分批灰度、观测闭环”的策略。推荐迁移步骤如下:
本阶段目标是确保消息能够稳定、有序地发送到新 RocketMQ 实例中。
注意
- 旧集群的消费端必须保持运行,以清空旧集群中正在持续产生的存量消息。
- 将第一批生产者的配置指向新 RocketMQ 集群的接入点,并按需重新部署或重启应用。
- 从小流量批次开始切生产端,实时观测新 RocketMQ 实例的消息生产速率等指标是否符合预期。稳定运行一段时间,例如 15-30 分钟后,再逐步扩大灰度批次。
消费端的切换,一定要等旧集群的消息全部消费完再进行,这是避免数据丢失、重复和乱序的关键。
- 登录旧 RocketMQ 集群的控制台,持续观察对应 Topic 和 Group 的消息堆积量(Lag),直到堆积量长时间保持为 0。同时,确认旧消费端的日志中不再有新的消息处理记录。
注意
如果是定时消息或事务消息,需要检查是否有未到期的消息或待提交的事务。
- 确认消息排空后,将对应批次的旧消费端应用实例逐步指向新 RocketMQ 集群。消费切到新 RocketMQ 集群的消费者将自动从其消费位点开始拉取新集群中的消息。
注意
每切换一批消费者,都要观察消费成功率、消费耗时、消息堆积等指标,再进行下一批次的消费端切换。
当所有批次迁移完成,新集群承载全部流量且稳定运行后,进行最后的收尾工作。
- 确认所有生产者已不再向旧集群写入数据。旧集群监控上,所有 Topic 生产速率应为 0。
- 保持旧集群的消费者运行,直到所有存量消息被消费完毕。
- 全量切换后,新实例持续稳定运行至少 24~48 小时,各项核心指标无异常波动。
注意
强烈推荐为新 RocketMQ 实例配置告警。具体操作,请参见推荐设置的告警规则。 分批迁移过程中,全部生产者、消费者节点迁移完成后,建议在火山引擎云监控服务控制台监控新实例和旧实例的生产和消费相关状态与流量数据,确认消息通路已成功迁移至新实例,确保业务正常运行。
您可以通过以下方式判断流量的分发情况:
- 旧集群:生产写入速率为 0,消息消费速率为 0,消息堆积为 0。