38 基于RocketMQ的数据过滤机制,提高订单数据库同步的处理效率

Posted 鮀城小帅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了38 基于RocketMQ的数据过滤机制,提高订单数据库同步的处理效率相关的知识,希望对你有一定的参考价值。

1. 数据库中混杂的binlog造成的问题

一个数据库中可能包含很多的数据,比如订单数据库,里面除了订单信息表以外,还包含很多其他的表。

这就导致在进行数据库 binlog 同步的时候,连带着会把一个数据库里所有表的 binlog 都推送到MQ里去了。

这样的情况下,在MQ的某个Topic中,就会混杂了几个或十几个表的 binlog数据,而不仅仅是订单表的binlog。

而在大数据系统中,它只关心订单数据库中的表A的 binlog ,并不关心其他表的 binlog,此时大数据系统就必须对获取到的所有表的 binlog 之后,对每条binlog判断一下是否是表 A 的 binlog。而这种操作必然导致大数据系统多耗费性能与时间去处理不关注的表的 binlog ,从而降低消息处理的效率。

2. 解决方案第一步:在发送消息的时候,给消息设置tag和属性

解决方案可以采用RocketMQ支持的数据过滤机制,来让大数据系统仅仅关注他想要的表的binlog数据即可。

首先,在发送消息的时候,可以给消息设置 tag 和属性。示例代码如下:

在上面的案例中,展示了发送消息的时候,还可以给消息设置 tag、属性等多个附加的信息。

3. 解决方案第二步:在消费数据的时候根据 tag 和属性进行过滤

在消费的时候根据 tag 和属性进行过滤,比如通过下面的代码去指定,只要 tag=TableA 和 tag=TableB 的数据。

 也可以通过下面的语法去指定,这里是根据每条消息的属性的值进行过滤,语法示例如下:

 RocketMQ支持比较丰富的数据过滤语法,如下所示:

(1)数值比较,比如:>,>=,<,<=,BETWEEN,=;

(2)字符比较,比如:=,<>,IN;

(3)IS NULL 或者 IS NOT NULL;

(4)逻辑符号 AND,OR,NOT;

(5)数值,比如:123,3.1415;

(6)字符,比如:‘abc’ ,比如用单引号包括起来;

(7)NULL, 特殊的常量;

(8)布尔值,TRUE 或 FALSE

以上是关于38 基于RocketMQ的数据过滤机制,提高订单数据库同步的处理效率的主要内容,如果未能解决你的问题,请参考以下文章

37 生产案例:基于RocketMQ进行订单库数据同步的消息乱序问题及解决方案

41 企业级的RocketMQ集群如何进行权限机制的控制?

使用RocketMQ的小细节(上)

企业级的RocketMQ集群如何进行权限机制的控制?

RocketMQ支持事务消息机制

平安保险基于 SPI 机制的 RocketMQ 定制化应用