一种自动化实现数据实时同步的系统技术方案

技术编号:30309157 阅读:56 留言:0更新日期:2021-10-09 22:49
本发明专利技术涉及数据实时同步相关领域,具体为一种自动化实现数据实时同步的系统,包括Canal订阅BinLog日志模块、数据配置模块、数据同步模块和数据对账模块,本发明专利技术相比现有的同步的系统,有以下的优点:只需要进行基本的数据库连接信息的配置和需要监听的Kafka Topic的配置,不需要进行额外的任何配置;不需要进行全量同步,进行增量的同步,效率高;借助Kafka消息中间件的优势,体现在消息传递的速度快,这样可以加快数据实时同步的效率;不需要借助数据库的触发器机制进行同步,避免了id自增的限制;同步不需要借助时间戳方式,避免了临时表的引入,因为如果表同步的量很大,需要的临时表也会增加,这样需要的内存空间也很大。大。大。

【技术实现步骤摘要】
一种自动化实现数据实时同步的系统


[0001]本专利技术涉及数据实时同步相关领域,具体为一种自动化实现数据实时同步的系统。

技术介绍

[0002]在一些业务场景中,需要对某些业务数据进行分库分表,主要是为了提升数据的查询效率,比如在订单系统中,会划分下单库、成单库、历史订单库,这里历史订单库主要是用于APP端订单查询或者MIS后台管理系统的订单查询,而下单库和成单库通常是做具体的业务处理操作,查询的频次比较少。那么这里就会牵扯到把下单库和成单库的数据同步到历史订单库的操作。类似从A库的M表把数据实时同步到B库的N表的操作。而现有的关系型数据库之间的数据同步通常采用全量同步、基于数据文件导出和导入的全量同步、基于触发器的增量同步、基于时间戳的增量同步等方式。但是这些方式或多或少会存在以下的问题:
[0003]一、数据量增大时,每天会有大量重复的配置工作,降低开发人员热情。
[0004]二、全量同步的方式,实时性要求比较低,耗时较高。
[0005]三、基于文件导入的方式,同步的扩展性较低,人工干预程度高,而且文件解析易出错。
[0006]四、基于触发器增量同步的方式,处理数据时,一定是按照自增id的顺序来处理,这种效率会非常低,没办法做批量操作,不然数据会错乱。
[0007]五、基于时间戳的增量同步的方式,同步时还需要建一张临时temp表,用来存取每次读取的待同步的数据,也就是把每次从原表中根据时间戳读取到数据先插入到临时表中,每次在插入前,先清空临时表的数据,比较繁琐,占用内存较高。

技术实现思路

[0008]本专利技术的目的在于提供一种自动化实现数据实时同步的系统,以解决上述
技术介绍
中提出的问题。
[0009]为实现上述目的,本专利技术提供如下技术方案:一种自动化实现数据实时同步的系统,包括Canal订阅BinLog日志模块、数据配置模块、数据同步模块和数据对账模块,所述Canal订阅BinLog日志模块将同步数据的源数据库对应表的操作日志写入到Kafka对应的Topic中,所述数据配置模块配置管理源数据库的连接信息和Kafka的Topic,所述数据同步模块在数据配置模块相关信息配置完成后进行数据同步服务程序,所述数据同步服务程序获取数据配置模块配置信息并开始监听Kafka的Topic,所述数据同步服务程序读取Kafka集群的相应消息队列数据并插入和更新到相应的目标数据库里的表中,所述数据对账模块每隔一小时对源数据库和目标数据库的数据表进行对此,同时数据对账模块对Canal的延迟情况进行监控,有异常时会及时告警。
[0010]优选的,所述Canal订阅BinLog日志模块根据Canal中间件的操作文档,在机器上
部署Canal服务,其中修改Canal的实例配置文件instance.properties,修改内容如下:
[0011]Canal.instance.master.address=127.0.0.1:3306,Mysql的地址信息;
[0012]Canal.instance.dbUsername=root,Mysql的用户名;
[0013]Canal.instance.dbPassword=123456,Mysql的密码;
[0014]Canal.instance.connectionCharset=utf

8,编码设置;
[0015]Canal.instance.defaultDatabaseName=db,选择当前需要监控的数据库名称;
[0016]Canal.instance.filter.regex=db.table1,白名单配置,指定数据库中的表进行同步;
[0017]Canal.mq.topic=topic1,修改kafka消费主题;
[0018]Canal的实例配置文件完成后,再对Canal的相关基本配置文件canal.properties的修改,修改内容如下:
[0019]Canal.serverMode=kafka,canal的服务模式,当前选择Kafka消费方式;
[0020]Canal.mq.servers=127.0.0.1:9092,127.0.0.1:9093,当前Kafka集群地址;
[0021]Canal.mq.batchSize=16384,消息队列批量操作的数量设置;
[0022]Canal.mq.maxRequestSize=1048576,消息队列最大请求量;
[0023]Canal.mq.bufferMemory=33554432,消息队列缓存大小;
[0024]Canal.mq.canalGetTimeout=100,Canal get数据的超时时间,单位:毫秒,空为不限超时;
[0025]所述Canal订阅BinLog日志模块中的Canal的实例配置文件和相关基本配置文件配置完成启动Canal服务,其中Canal服务对相关配置的源数据库的表开始进行监听。
[0026]优选的,所述数据配置模块中的配置信息在数据同步服务程序里的application.properties文件中配置,完成配置之后,在数据同步服务程序里新建DbConfig类,在该类上加上@Configuration注解,然后通过Spring框架提供的数据库连接的方法。
[0027]优选的,所述数据同步模块的数据同步包含以下几个步骤:
[0028]步骤1、根据监听的表名声明个监听类,比如监听表create_guest,那么新建个CreateGuestListener类用于接收相应topic的Kafka消息,具体接收方法如下:
[0029]@KafkaListener(topics="${create.guest.topic}",groupId="${kafka.listener.group}",containerFactory="kafkaListenerContainerFactory")public void listen(ConsumerRecord<?,?>record,Consumer consumer){//接收到数据后的处理办法};
[0030]主要利用@KafkaListener注解进行消费消息,里面的create.guest.topic为当前application.properties文件中配置监听的表名,kafka.listener.group为Kafka的消费组名,kafka Listener Container Factory为当前Kafka容器名,在接收到数据之后,如果需要对某些字段在listen方法中进行处理;
[0031]步骤2、声明一个接口类DbDao,里面不定义任何方法,在定义的每个源据库表对应的数据库操作接口类中继承DbDao类,比如处理order_guest表的接口类OrderGuestDao继承DbDao,同时在每个接本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种自动化实现数据实时同步的系统,包括Canal订阅BinLog日志模块(1)、数据配置模块(2)、数据同步模块(3)和数据对账模块(4),其特征在于:所述Canal订阅BinLog日志模块(1)将同步数据的源数据库(5)对应表的操作日志写入到Kafka对应的Topic中,所述数据配置模块(2)配置管理源数据库(5)的连接信息和Kafka的Topic,所述数据同步模块(3)在数据配置模块(2)相关信息配置完成后进行数据同步服务程序,所述数据同步服务程序获取数据配置模块(2)配置信息并开始监听Kafka的Topic,所述数据同步服务程序读取Kafka集群的相应消息队列数据并插入和更新到相应的目标数据库(6)里的表中,所述数据对账模块(4)每隔一小时对源数据库(5)和目标数据库(6)的数据表进行对此,同时数据对账模块(4)对Canal的延迟情况进行监控,有异常时会及时告警。2.根据权利要求1所述的一种自动化实现数据实时同步的系统,其特征在于:所述Canal订阅BinLog日志模块(1)根据Canal中间件的操作文档,在机器上部署Canal服务,其中修改Canal的实例配置文件instance.properties,修改内容如下:Canal.instance.master.address=127.0.0.1:3306,Mysql的地址信息;Canal.instance.dbUsername=root,Mysql的用户名;Canal.instance.dbPassword=123456,Mysql的密码;Canal.instance.connectionCharset=utf

8,编码设置;Canal.instance.defaultDatabaseName=db,选择当前需要监控的数据库名称;Canal.instance.filter.regex=db.table1,白名单配置,指定数据库中的表进行同步;Canal.mq.topic=topic1,修改kafka消费主题;Canal的实例配置文件完成后,再对Canal的相关基本配置文件canal.properties的修改,修改内容如下:Canal.serverMode=kafka,canal的服务模式,当前选择Kafka消费方式;Canal.mq.servers=127.0.0.1:9092,127.0.0.1:9093,当前Kafka集群地址;Canal.mq.batchSize=16384,消息队列批量操作的数量设置;Canal.mq.maxRequestSize=1048576,消息队列最大请求量;Canal.mq.bufferMemory=33554432,消息队列缓存大小;Canal.mq.canalGetTimeout=100,Canal get数据的超时时间,单位:毫秒,空为不限超时;所述Canal订阅BinLog日志模块(1)中的Canal的实例配置文件和相关基本配置文件配置完成启动Canal服务,其中Canal服务对相关配置的源数据库(5)的表开始进行监听。3.根据权利要求1所述的一种自动化实现数据实时同步的系统,其特征在于:所述数据配置模块(2)中的配置信息在数据同步服务程序里的application.properties文件中配置,完成配置之后,在数据同步服务程序里新建DbConfig类,在该类上加上@Configuration注解,然后通过Spring框架提供的数据库连接的方法。4.根据权利要求1所述的一种自动化实现数据实时同步的系统,其特征在于,所述数据同步模块(3)的数据同步包含以下几个步骤:步骤1、根据监听的表名声明个监听类,比如监听表create_guest,那么新建个CreateGuestListener类用于接收相应topic的Kafka消息,具体接收方法如下:
@KafkaListener(topics="${create.guest.topic}",groupId="${kafka.listener.group}",containerFactory="kafkaListenerContainerFactory")public voidlisten(ConsumerRecord<?,?>record,Consumer consumer){//接收到数据后的处理办法};主要利用@KafkaListener注解进行消费消息,里面的create.guest.topic为当前application.properties文件中配置监听的表名,k...

【专利技术属性】
技术研发人员:陈晓阳
申请(专利权)人:上海赛可出行科技服务有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1