前提条件
已创建云消息队列 RocketMQ 版实例。版本要求:
本文以源集群和目标集群均为云消息队列 RocketMQ 版5.0系列实例为例进行说明。
计算规格选择建议
使用全球消息备份时,需考虑备份任务源以及目标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 |
创建全球消息备份任务
说明 首次使用全球消息备份时,会弹出阿里云服务授权 - RocketMQ 全球消息备份的对话框,单击确认后将自动创建目标服务的关联角色AliyunServiceRoleForRMQDisasterRecovery
,以便在云消息队列 RocketMQ 版中实现全球消息备份功能。更多信息,请参见服务关联角色。
- 登录云消息队列 RocketMQ 版控制台。
在左侧导航栏,单击全球消息备份,然后单击创建任务。
在创建任务页面,填写以下信息,主要配置如下,其余可按需配置,然后单击创建。

源集群与目标集群的不同集群类型配置,请参见下表:
消息队列 RocketMQ 版
配置项 | 说明 | 配置示例 |
版本 | 选择云消息队列 RocketMQ 版实例版本。 | 5.0系列实例 |
地域 | 选择云消息队列 RocketMQ 版实例的地域。 | 华东1(杭州) |
实例 | 选择云消息队列 RocketMQ 版实例。 | rmq-cn-778*** |
认证模式 | | ACL身份识别 |
用户名 | 选择用户名。 | yS8x01**** |
过滤条件系统配置 | key:过滤条件是消费端通过SQL92过滤消息的条件。因源、目标集群有全量消息数据,当消费端不设置过滤条件时,消费端将消费全量数据;当消费端设置过滤条件时,可实现仅消费源或目标集群消息。该Key在消息同步时,会注入到消息自定义属性UserProperty中。请避免与业务需要的属性相冲突。 源集群Value:源集群向目标集群同步消息时,系统注入的Key的值。可通过如下方式获取: Map<String, String> properties = messageView.getProperties();
String Value = properties.get("参数Key");
目标集群Value:目标集群向源集群同步消息时,系统注入的Key的值。
| 无 |
Apache RocketMQ
配置项 | 说明 | 配置示例 |
接入点 | 接入点格式为{域名/IP}:{端口号} 。 | XX.XX.XX.XX:8080 |
认证模式 | | ACL身份识别 |
用户名 | 根据业务自行填写。 | yS8x01**** |
密码 | 根据业务自行填写。 | F17R4to**** |
网络配置 | | 公网 |
地域 | 网络配置为VPC网络时配置。选择Apache RocketMQ所在ECS服务中的地域。 | 华东1(杭州) |
VPC 网络 | 网络配置为VPC网络时配置。Apache RocketMQ所在ECS服务中的实际VPC。 | vpc-bp17fapfdj0dwzjkd**** |
交换机 | 网络配置为VPC网络时配置。Apache RocketMQ所在ECS服务中的实际交换机。 | vsw-bp1gbjhj53hdjdkg**** |
安全组 ID | 网络配置为VPC网络时配置。Apache RocketMQ所在ECS服务中的实际安全组。 | sg-2ze4jlbqy2s40pc4**** |
过滤条件系统配置 | key:过滤条件是消费端通过SQL92过滤消息的条件。因源、目标集群有全量消息数据,当消费端不设置过滤条件时,消费端将消费全量数据;当消费端设置过滤条件时,可实现仅消费源或目标集群消息。该Key在消息同步时,会注入到消息自定义属性UserProperty中。请避免与业务需要的属性相冲突。 源集群Value:源集群向目标集群同步消息时,系统注入的Key的值。可通过如下方式获取: Map<String, String> properties = messageView.getProperties();
String Value = properties.get("参数Key");
目标集群Value:目标集群向源集群同步消息时,系统注入的Key的值。
| 无 |
消费端说明
例如,我们配置源集群为上海云消息队列 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);
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读取权限。您可在实例的选中该用户,通过资源名设置通配符“*” 赋予该账号全量权限,以降低配置工作量。
全球消息备份任务暂停再恢复,消息数据可以继续同步吗?
可以,暂停再恢复后,全球消息备份任务会从latest acked offset的下一条数据继续同步。但注意不要超过云消息队列 RocketMQ 版消息保存时间。