文档

使用说明

更新时间:

本文为您介绍全球消息备份的操作指导和页面相关属性介绍以及常见问题,以帮助您快速了解使用相关功能。

前提条件

  • 已创建云消息队列 RocketMQ 版实例。

    版本要求:

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

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

  • 创建服务关联角色

    • 角色名称:AliyunServiceRoleForRMQDisasterRecovery

    • 权限策略:AliyunServiceRolePolicyForRMQDisasterRecovery

    • 权限说明:允许云消息队列 RocketMQ 版使用该角色获取访问事件总线EventBridge的权限。

创建全球消息备份任务

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

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

image

表1.属性说明

配置项

说明

配置示例

任务类型

  • 单向备份:源集群向目标集群单向同步消息数据(不包含消费位点)

  • 双向备份:

    • 源集群向目标集群单向同步消息数据(不包含消费位点)

    • 目标集群向源集群单向同步消息数据(不包含消费位点)

单向备份:源集群向目标集群同步数据

接入点

Apache RocketMQ集群的接入节点,格式可参考 xx.xx.xx.xx:xxxx。

不涉及

过滤条件系统配置

  • key:过滤条件是消费端通过SQL92过滤消息的条件。因源、目标集群有全量消息数据,当消费端不设置过滤条件时,消费端将消费全量数据;当消费端设置过滤条件时,可实现仅消费源或目标集群消息。该Key在消息同步时,会注入到消息自定义属性UserProperty中。请避免与业务需要的属性相冲突。

  • 源集群Value:源集群向目标集群同步消息时,系统注入的Key的值。可通过如下方式获取:

    Map<String, String> properties = messageView.getProperties();
    String Value = properties.get("参数Key");
  • 目标集群Value:目标集群向源集群同步消息时,系统注入的Key的值。

image

网络配置

  • 公网。

  • VPC网络。

公网

VPC 网络

Apache RocketMQ所在ECS服务中的实际VPC。

vpc-bp17fapfdj0dwzjkd****

交换机

Apache RocketMQ所在ECS服务中的实际交换机。

vsw-bp1gbjhj53hdjdkg****

安全组 ID

Apache RocketMQ所在ECS服务中的实际安全组。

sg-2ze4jlbqy2s40pc4****

用户名

  • 消息队列RocketMQ版的会自动带出。

  • Apache RocketMQ需根据业务自行填写。

yS8x01L3yhIn1****

安全组

  • 云消息队列 RocketMQ 版实例

    安全组出方向开放8080、8081端口,网段需包含云消息队列 RocketMQ 版实例的VPC。

  • Apache RocketMQ 集群

    安全组出方向开放9876、10911、10909,网段要包含自建Apache RocketMQ集群所在网段。(如客户修改了nameserver,broker的端口,请开放设置后的端口)。

不涉及

消费端说明

例如,我们配置源集群为上海云消息队列 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);

常见问题

三个实例是否可以互相备份?

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

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

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

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

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

全球消息备份如何收费?

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

全球消息备份认证模式配置ACL后,为什么没有收到同步的消息?

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

全球消息备份任务暂停再恢复,消息数据可以继续同步吗?

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