You need to enable JavaScript to run this app.
导航

RocketMQ 业务迁移

最近更新时间2023.06.01 14:51:22

首次发布时间2022.02.17 11:37:09

本文介绍 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 内,才能正常访问实例。
    详细操作步骤请参考 创建私有网络
  • 购买 ECS 云服务器实例。
    在连接 RocketMQ 实例之前,您需要先购买 ECS 云服务器,安装 JDK 以及配置环境变量。
    详细操作步骤请参考 购买云服务器
  • 购买 RocketMQ 实例。
    请根据业务量评估结果合理选择 RocketMQ 实例的计算规格和存储规格,保证资源充足。
    详细操作步骤请参考 创建RocketMQ实例
  • 创建RocketMQ实例密钥。
    消息队列 RocketMQ版支持 ACL 权限管理,完全兼容 RocketMQ 的所有的内置权限策略。您需要在 RocketMQ 控制台中创建密钥对,并妥善保管AccessKey ID,AccessKey Secret。
    详细操作步骤请参考 创建密钥

2 迁移元数据

将开源 RocketMQ 的 Topic 和 Group 的配置信息迁移到消息队列 RocketMQ版的新实例中,包括 Topic 名称、队列个数和权限在内的配置信息均需要迁移。迁移元数据时,并不会迁移 Topic 中的消息数据。
您可以在原 RocketMQ 集群的WebUI控制台或云控制台中查看并收集相关元数据,并手动创建相关 Topic 和 Group 配置。
在迁移元数据的步骤中,您需要获取的元数据包括以下几种。

元数据

说明

迁移方式

Topic名称

Topic 的名称。

在火山引擎 RocketMQ 控制台中创建相同名称的 Topic。

GroupID

Group的ID。

在火山引擎 RocketMQ 控制台中创建相同的 Group。

RocketMQ实例ID

RocketMQ 实例的 ID。

创建火山引擎 RocketMQ 实例即可。
在步骤 3 迁移消息服务时需要在代码中手动替换实例 ID 为新的实例 ID,表示将消息通路切换到新的集群。

说明

如果用户在旧集群生产端和客户端设置了命名空间(Namespace),需要将 Namespace 修改为新实例的实例 ID。

密钥对

RocketMQ 实例密钥对。

火山引擎提供数据面的密钥对,您需要在 RocketMQ 控制台中创建密钥对,并妥善保管 AccessKey ID,AccessKey Secret。如果已在步骤 1 环境准备中创建了密钥对,则无需再次创建。
在步骤 3 迁移消息服务时需要在代码中手动替换 AK、SK 为新的密钥对,通过新的密钥对进行鉴权。

接入点

RocketMQ 实例的接入点。

在创建 RocketMQ 实例后,可以在示例详情页面查看接入点信息。
步骤 3 迁移消息服务时需要在代码中手动替换接入点为新的实例接入点。

3 迁移消息服务

手动修改生产者集群和消费者集群的接入信息,将消息生产者集群和消费者集群的节点连接到云上的消息队列 RocketMQ版实例,实现所有的消息收发业务都在消息队列 RocketMQ版实例上进行,完成消息收发链路的平滑迁移。

说明

建议分批进行迁移,且先迁移部分消息消费集群,保证新实例具备消费能力,再迁移部分消息生产集群,确认业务运行稳定后再迁移剩余流量。

推荐迁移步骤如下。

3.1 切换部分消费者节点

  1. 执行切换。
    将部分消费客户端的元数据连接地址改为消息队列 RocketMQ版新实例的元数据连接地址,重启消费业务,消费者从新 RocketMQ 实例中消费消息,将这部分消费者接入到云上的消息队列 RocketMQ版。
    切换的这部分消费者将消费消息队列 RocketMQ版集群中的消息,剩余消费者继续消费开源 RocketMQ 集群中的消息。
  2. 确认消息消费无异常。
    您可以模拟生产一些消息,验证新的消息通路是否已打通。

3.2 切换部分生产者节点

  1. 执行切换。
    将部分生产客户端的元数据连接地址改为消息队列 RocketMQ版实例的元数据连接地址,重启生产业务,重启生产业务,生产者将新的消息发送到新 RocketMQ 实例中,将这部分生产者接入到云上消息队列 RocketMQ版。
    切换的这部分生产者将发送消息到消息队列 RocketMQ版实例中;剩余的生产者还是将消息发送到开源 RocketMQ 集群中。
  2. 验证切换结果。
    在火山引擎云监控中确认新实例消息生产和消费速率、确认是否有消息堆积。
    • 查看速率:建议通过主题页签下的消息生产速率指标和消费组页签下的Topic消费速率指标进行判断,如果两个指标数据基本持平,表示消息生产与消费速率持平,业务流量平稳。
    • 检查消息堆积:消费组页签下的Topic可消费消息数尽量小即可。
      图片

3.3 切换剩余生产者节点

参考3.2 切换部分生产者节点步骤切换剩余生产者节点,并验证切换效果。

3.4 切换剩余消费者节点

  1. 确认旧集群消息已消费完成。
    通过 RocketMQ 旧集群中的消息堆积量判断消息是否消费完成确保旧集群中的消息已全部消费完,否则可能会导致部分消息未消费。您可以通过查看开源。
  2. 切换剩余消费者节点。
    将剩余部分的消费客户端元数据连接地址改为消息队列 RocketMQ版新实例的元数据连接地址,重启消费业务,将剩余的消费者全部接入到消息队列 RocketMQ版上。

4 确认迁移结果

分批迁移过程中、完成全部的生产者和消费者节点迁移之后,建议在火山引擎云监控服务控制台监控新实例和旧实例的生产和消费相关状态与流量数据,确认消息通路已成功迁移至新实例,确保业务正常运行。
您可以通过以下方式判断流量的分发情况。

  • 旧集群生产写入速率为 0,消息消费速率为 0,消息堆积为 0。
  • 新实例的生产和消费 TPS 应和迁移前相同。
    图片