一、适用场景
本方案适用于 自建 RocketMQ 迁移至 阿里云消息队列 RocketMQ 场景。
迁移类型适用于:元数据迁移、消息切 流。
二、阿里云消息队列 RocketMQ 对比自建 RocketMQ 的优势
对比项 | 阿里云 RocketMQ | 自建 RocketMQ |
存储弹性 | 无资源池,一般采用存算一体架构。 | 充分利用云基础设施大规模资源池,存算分离架构。 |
API/SDK接入 | 支持Apache RocketMQ SDK。 |
|
技术架构 |
|
|
计算弹性 |
|
|
运维复杂度 |
|
|
稳定性保障 | 自行运维保障,需要资深技术人员储备。 | 提供明确服务能力的SLA保障:
|
企业级增强能力 | 自行定制开发,需要资深技术人员储备。 | 开箱即用,提供全链路灰度、消息路由复制、ETL、事件集成分析等增强能力。 |
体系化容灾能力 | 自行运维保障,需要资深技术人员储备。 | 提供以下体系化容灾方案:
|
三、迁移相关工具介绍
1、阿里云消息队列 RocketMQ 控制台迁移工具
阿里云消息队列 RocketMQ 控制台迁移工具,网络打通的前提下,通过在线方式将自建 RocketMQ 元数据复制到阿里云消息队列 RocketMQ 版实现元数据迁移;通过云消息队列 RocketMQ 版自带的路由控制组件后台代理 Topic 路由信息,实现对客户端读写流量的动态切换,完成消息切流。
迁移工具只支持元数据迁移,不支持消息数据迁移。
四、迁移方案
1、迁移整体流程
实例创建:在阿里云创建对应的规格的云消息队列 RocketMQ 实例。
数据迁移:通过使用阿里云 RocketMQ 控制台迁移工具,进行元数据迁移。
消息切流:通过使用阿里云 RocketMQ 控制台迁移工具,进行消息切流。
2、数据迁移方案
2.1、使用阿里云 RabbitMQ 控制台迁移工具进行元数据迁移
迁移原理:
元数据迁移:通过读取源自建RocketMQ集群的元数据信息,并复制到目标阿里云云消息队列 RocketMQ 版集群中,实现元数据的创建和同步。
消息切流:通过云消息队列 RocketMQ 版自带的路由控制组件后台代理Topic路由信息,实现对客户端读写流量的动态切换,切换过程业务无感知。
前置条件:
阿里云上创建作为元数据迁移目标的云消息队列 RocketMQ 版实例。
阿里云上创建服务关联角色:
角色名称:AliyunServiceRoleForRMQMigration
权限策略:AliyunServiceRolePolicyForRMQMigration
权限说明:允许云消息队列 RocketMQ 版使用该角色获取访问专有网络VPC的权限。
确保自建 RocketMQ 网络已跟云上网络互通。
风险及注意项:
在迁移之前,请检查源集群是否存在定时消息。迁移任务完成后,所有生产和消费的路由将被切换到目标集群,可能会造成部分定时消息、失败重试消息无法消费的情况。建议迁移后源集群保留部分消费者进程,以便完成定时消息和失败重试消息的消费。
仅支持Apache RocketMQ 5.x、 4.x服务端版本。
方案优势:
云消息队列 RocketMQ 版迁移上云方案基于阿里云消息队列自研的消息路由元数据代理组件实现,可支持Topic粒度的消息收发路由调度及切流控制。该方案具备如下优势:
服务不中断、消息收发影响小::迁移方案支持无感切换,在切流期间消息收发不中断,业务应用无感知,出现消息延迟和消息重复问题几率非常小。
无需额外资源:业务方应用无需为迁移上云进行扩容或部署多套集群,迁移过程仅需要业务方进行配置滚动升级变更,无需额外的机器资源。
业务入侵小、易实施:迁移过程中仅需要相关业务应用更改接入点配置并重启应用一次,后续切流全部由云消息队列 RocketMQ 版服务端动态配置生效。消息的上下游链路可自由升级,无需梳理收发链路依赖。整个操作流程影响范围小,便于上下游业务配合实施。
可灰度、可回滚:迁移任务粒度精确到Topic级别,可以按照指定Topic进行灰度操作,迁移过程中有业务风险可随时回滚。
3、数据校验方案
3.1 元数据校验:
暂无;
五、实施迁移过程
1、使用阿里云 RocketMQ 控制台迁移工具进行元数据迁移、消息切流
步骤一:创建迁移上云任务
创建迁移上云任务,填写对应源端、目标端集群相关信息。
步骤二:配置网络信息
创建迁移任务并配置源自建集群的网络信息,用于云消息队列 RocketMQ 版迁移工具读取源自建集群的元数据信息,并实现后续迁移任务的控制。
注意事项
云消息队列 RocketMQ 版迁移工具按照最小范围粒度仅访问源自建集群如下信息:
Topic元数据配置信息
Group元数据配置信息
Topic动态路由注册信息
消费者连接信息及消费堆积信息
不会访问源集群其他信息,也不会对源自建集群的配置信息做任何写操作,因此不会对源自建集群的运行造成影响。
网络信息配置完成后请务必仔细检查,确认无误后再进行下一步操作,一旦进入下一步则无法回退修改网络配置信息,只能重新创建任务。
操作步骤
在顶部菜单栏选择源集群和目标云消息队列 RocketMQ 版实例所属地域,然后在左侧导航栏选择RocketMQ Copilot > 迁移上云。
在迁移上云页面单击创建任务。
在弹出的创建迁移任务面板配置相关参数,然后单击确定。
具体参数说明,请参见迁移上云操作。
在迁移上云配置向导的网络信息配置页面中填写源自建RocketMQ集群的网络信息,然后单击配置网络信息。
具体参数说明,请参见迁移上云操作。
等待后台配置,直到页面显示配置完成,然后单击下一步。
步骤三:迁移的 Topic、Group 元数据
网络打通后,需要根据迁移范围选择指定的Topic和Group,完成元数据迁移操作。
注意事项
迁移元数据时,云消息队列 RocketMQ 版迁移工具会动态读取源自建集群的Topic和Group信息并在列表中全部展示,只需要操作本次任务范围内相关的Topic和Group即可。
该操作步骤无法回退,请确保本次任务范围内的Topic和Group都迁移完成后再进入下一步,否则后续需要手动补充Topic。
操作步骤
在迁移上云任务的元数据迁移配置向导页面,单击Topic元数据页签。
在Topic列表中选中需要迁移的Topic,在消息类型下拉框中选择对应的Topic的类型,然后在其操作列单击确认并导入。您也可以选择多个Topic,直接单击批量导入。
单击Group元数据页签,在Group列表中选中需要迁移的Group,在消费顺序类型下拉框中选择消息消费的投递顺序,然后在其操作列单击确认并导入。您也可以选择多个Group,直接单击批量导入。
确认本次迁移任务内所有需要迁移的Topic和Group已经全部导入后,单击导入完成,进入下一步。
步骤四:更换接入点(更换sdk)
Topic和Group元数据迁移完成后,开始进入线上业务迁移阶段,您需要协调此次迁移涉及的生产者应用、消费者应用连接到目标集群,即将生产者和消费者应用的接入点修改为云消息队列 RocketMQ 版5.x实例的接入点。
注意事项
接入点更换后修改重启生产者和消费者应用,此步骤虽然将消息收发应用接入到目标云消息队列 RocketMQ 版实例,但迁移工具后台仍将消息收发的Topic路由连接至源自建集群,因此消息收发链路在该步骤不会产生变化和影响。各消息收发应用间可自由安排切换顺序。
请确保此次迁移涉及的所有生产者应用和消费者应用均已完成接入点更换,不能有遗漏。
如果部分生产者应用未更换接入点,则会导致部分消息发送失败。
如果部分消费者应用未更换接入点,则会导致消息堆积部分消息消费不到。
这一步虽然更换了云上消息队列 RocketMQ 的 SDK,实际上通过路由网关读写的还是源端的消息。
操作步骤
消息收发应用接入点配置修改完成并重启应用后,在迁移上云任务的更换接入点配置向导页面单击变更完成,进入下一步。
步骤五:按照Topic进行切流
迁移消息业务需要按照Topic粒度对每个Topic进行切流操作,将消息读写流量分阶段切换到目标集群上。
注意事项
执行切流操作时,每切换一次Topic状态,请及时观察消息收发是否符合预期,若无异常再执行下一步切换操作,若消息收发出现异常可直接回滚操作,待异常原因排查后继续进行切流操作。
请确保此次迁移任务范围内的Topic均完成切流操作,且切流后消息收发平稳无异常再选择完成迁移任务,迁移任务一旦完成则无法修改。
其他说明:
这里由于在上一步没有真正执行更换SDK并部署,所以这里由于无法检测到订阅端,状态检查异常,如果更换SDK并部署后,这里的状态会变成“检查通过”,“确认切流” 为可点击状态。这个时候就可以执行切流操作,切流操作后,消息读写会真正路由到消息队列RocketMQ上。
六、数据校验过程
暂无;
七、迁移注意事项
暂无;