使用说明

本文为您介绍Global Replicator的操作指导、页面相关属性介绍以及常见问题,以帮助您快速了解使用相关功能。

前提条件

已创建云消息队列 RocketMQ 版实例。版本要求:

  • 云消息队列 RocketMQ 版4.0系列铂金版。

  • 云消息队列 RocketMQ 版5.0系列专业版、铂金版。

本文以源集群和目标集群均为云消息队列 RocketMQ 版5.0系列实例为例进行说明。

计算规格选择建议

在使用Global Replicator时,配置完成Topic映射关系后,消息同步将对实例产生额外的TPS开销,因此需要考虑同步任务源及目标RocketMQ实例的收发TPS峰值上限。

建议规格说明:

例如,在未同步的情况下,云消息队列 RocketMQ 版实例的发送TPS峰值为10000(次/秒),接收TPS峰值为10000(次/秒)。

建议源实例和目标实例的TPS配置如下:

任务类型

源实例

目标实例

收发TPS峰值上限(次/秒)

发送TPS峰值(次/秒)

接收TPS峰值(次/秒)

收发TPS峰值上限(次/秒)

发送TPS峰值(次/秒)

接收TPS峰值(次/秒)

单向同步

30000

10000

20000

20000

10000

10000

双向同步

40000

20000

20000

40000

20000

20000

说明
  • 实例的收发TPS峰值上限可以在实例详情页面查看,不同规格实例的TPS峰值上限,请参见实例规格上限

  • 目标实例接收TPS峰值可根据业务需要的处理速度进行调整。

创建Global Replicator任务

说明

首次使用Global Replicator时,会弹出阿里云服务授权 - RocketMQ Global Replicator的对话框,单击确认后将自动创建目标服务的关联角色AliyunServiceRoleForRMQDisasterRecovery,以便在云消息队列 RocketMQ 版中实现Global Replicator功能。更多信息,请参见服务关联角色

步骤一:创建任务

  1. 登录云消息队列 RocketMQ 版控制台
  2. 在左侧导航栏,单击Global Replicator,然后单击创建任务

  3. 创建任务页面,填写以下信息,主要配置如下,其余可按需配置,然后单击创建

    image

    源集群与目标集群的不同集群类型配置,请参见下表:

    消息队列 RocketMQ 版

    配置项

    说明

    配置示例

    版本

    选择云消息队列 RocketMQ 版实例版本。

    • 4.0系列实例

    • 5.0系列实例

    5.0系列实例

    地域

    选择云消息队列 RocketMQ 版实例的地域。

    华东1(杭州)

    实例

    选择云消息队列 RocketMQ 版实例。

    rmq-cn-778***

    认证模式

    • 无需配置

    • ACL身份识别

    ACL身份识别

    用户名

    选择用户名。

    yS8x01****

    安全组 ID

    云消息队列 RocketMQ 版实例所在ECS服务中的安全组。版本5.0系列实例时配置。

    • 入方向:无要求

    • 出方向:

      • 授权策略:允许

      • 协议:自定义TCP

      • 访问目的:网段包含集群交换机的所有网段;端口包含80808081。

    sg-2ze4jlbqy2s40pc4****

    过滤条件系统配置

    (可选)支持向消息中添加自定义属性(UserProperty),消费者可基于SQL92语法订阅策略实现消息过滤。

    • Key:UserPropertyKey

    • 源集群Value:来自源集群的消息添加的UserPropertyValue

    • 目标集群Value:来自目标集群的消息添加的UserPropertyValue

    SQL92订阅过滤示例如下:

    String sqlStr = "{Key} IS NOT NULL AND {Key} = {源/目标集群Value}";
    consumer.subscribe(MqConfig.TOPIC, 
        MessageSelector.bySql(sqlStr));

    Apache RocketMQ

    配置项

    说明

    配置示例

    接入点

    接入点格式为{域名/IP}:{端口号}

    XX.XX.XX.XX:8080

    认证模式

    • 无需配置

    • ACL身份识别

    ACL身份识别

    用户名

    根据业务自行填写。

    yS8x01****

    密码

    根据业务自行填写。

    F17R4to****

    网络配置

    • 公网

    • VPC网络

    公网

    地域

    网络配置VPC网络时配置。选择Apache RocketMQ所在ECS服务中的地域。

    华东1(杭州)

    VPC 网络

    网络配置VPC网络时配置。Apache RocketMQ所在ECS服务中的实际VPC。

    vpc-bp17fapfdj0dwzjkd****

    交换机

    网络配置VPC网络时配置。Apache RocketMQ所在ECS服务中的实际交换机。

    vsw-bp1gbjhj53hdjdkg****

    安全组 ID

    网络配置VPC网络时配置。Apache RocketMQ所在ECS服务中的实际安全组。

    • 入方向:无要求

    • 出方向:

      • 授权策略:允许

      • 协议:自定义TCP

      • 访问目的:网段包含所有Apache RocketMQ节点所在的网段;端口号包含所有Apache RocketMQ节点服务的端口号,默认端口号包含9876、1091110909(如果修改了nameserver,broker的端口,需设置修改后的端口)。

    sg-2ze4jlbqy2s40pc4****

    过滤条件系统配置

    (可选)支持向消息中添加自定义属性(UserProperty),消费者可基于SQL92语法订阅策略实现消息过滤。

    • Key:UserPropertyKey

    • 源集群Value:来自源集群的消息添加的UserPropertyValue

    • 目标集群Value:来自目标集群的消息添加的UserPropertyValue

    SQL92订阅过滤示例如下:

    String sqlStr = "{Key} IS NOT NULL AND {Key} = {源/目标集群Value}";
    consumer.subscribe(MqConfig.TOPIC, 
        MessageSelector.bySql(sqlStr));

步骤二:配置Topic映射关系

  1. 任务基本信息页面,单击左侧导航栏的消息同步任务

  2. 单击批量映射或者添加映射,在弹出的对话框中配置需要同步的Topic映射关系。

    • 批量映射:配置并勾选所需的Topic映射,然后单击确定

    • 添加映射:配置所需的Topic映射,然后单击确定

    说明
    • 若源集群类型为Apache RocketMQ,则需要填写一个用于同步消息的Group,避免使用正常业务的Group。

    • 完成配置Topic映射关系后,消息才会开始同步。

步骤三:(可选)开启消费进度同步

开启消费进度同步后,可以将Group消费Topic的当前消费进度同步到目标集群。详情请参见消费进度同步

消费端说明

例如,我们配置源集群为上海云消息队列 RocketMQ 版实例与目标集群杭州云消息队列 RocketMQ 版实例双向同步的任务。过滤条件的Key设置为Region,源集群Value设置为Shanghai,目标集群Value设置为Hangzhou。

上海消费端正常情况下仅消费上海地域的数据,不消费杭州数据,所以采用单个自定义属性匹配即可。具体请参见事件模式

  • 订阅消息,根据单个自定义属性匹配消息。

String topic = "topic";
//只订阅本地域的消息。
FilterExpression filterExpression = new FilterExpression("Region IS NOT NULL", FilterExpressionType.SQL92);
//因为本地生产应用在发送消息时并没有在消息中设置UserProperty的Key为Region的值,所以Key为Region的自定义属性为NULL
simpleConsumer.subscribe(topic, filterExpression);
  • 订阅消息,匹配Topic中的所有消息,不进行过滤。

String topic = "topic";
//订阅所有消息。
FilterExpression filterExpression = new FilterExpression("True", FilterExpressionType.SQL92);
simpleConsumer.subscribe(topic, filterExpression);

常见问题

三个实例是否可以互相同步?

可以,Global Replicator的配置是两个实例间的任务配置,三个实例间需要配置三个任务,可以保障每个实例都具备全量数据。

构建双向同步的实例,是否还可以使用TAG过滤?

TAGSQL过滤方式仅能选择一种。因消费应用需要采用SQL过滤的方式过滤数据,所以建议需要采用TAG过滤的实例统一采用SQL过滤的方式进行消息过滤。具体请参见消息过滤

是否支持已经存在的单向同步任务变更为双向同步任务?

如果源集群和目标集群均为云消息队列 RocketMQ 版实例,支持变更,且不影响存量单向任务的运行。如果有一个集群为Apache RocketMQ开源集群,暂时不支持由单向同步变更为双向同步,您可能需要删除任务并重新创建。

Global Replicator如何收费?

Global Replicator的同步通道依赖事件总线EventBridge产品,EventBridge的费用请参见计费说明。Global Replicator同步消息数据会占用云消息队列 RocketMQ 版源实例的读性能,目标实例的写性能,您需要额外评估云消息队列 RocketMQ 版的计算规格。

Global Replicator认证模式配置ACL后,为什么没有收到同步的消息?

Global Replicator配置同步任务后,您需要配置需要同步的Topic,系统会对应每一个Topic任务生成系统Group用于消息数据同步,该Group不可被删除,仅当删除任务时,系统会将对应的Group删除。如果您开启了ACL的认证模式,需要对选择的ACL用户设置Topic写入、读取权限和Group读取权限。您可在实例的访问控制 > ACL权限选中该用户,通过资源名设置通配符“*” 赋予该账号全量权限,以降低配置工作量。

Global Replicator任务暂停再恢复,消息数据可以继续同步吗?

可以,暂停再恢复后,Global Replicator任务会从latest acked offset的下一条数据继续同步。但注意不要超过云消息队列 RocketMQ 版消息保存时间。