CN113468170A - 一种自动化实现数据实时同步的系统 - Google Patents

一种自动化实现数据实时同步的系统 Download PDF

Info

Publication number
CN113468170A
CN113468170A CN202110618313.3A CN202110618313A CN113468170A CN 113468170 A CN113468170 A CN 113468170A CN 202110618313 A CN202110618313 A CN 202110618313A CN 113468170 A CN113468170 A CN 113468170A
Authority
CN
China
Prior art keywords
data
synchronization
kafka
database
canal
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110618313.3A
Other languages
English (en)
Inventor
陈晓阳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Secco Travel Technology Service Co ltd
Shanghai Saike Mobility Technology Service Co Ltd
Original Assignee
Shanghai Secco Travel Technology Service Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Secco Travel Technology Service Co ltd filed Critical Shanghai Secco Travel Technology Service Co ltd
Priority to CN202110618313.3A priority Critical patent/CN113468170A/zh
Publication of CN113468170A publication Critical patent/CN113468170A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

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

Description

一种自动化实现数据实时同步的系统
技术领域
本发明涉及数据实时同步相关领域,具体为一种自动化实现数据实时同步的系统。
背景技术
在一些业务场景中,需要对某些业务数据进行分库分表,主要是为了提升数据的查询效率,比如在订单系统中,会划分下单库、成单库、历史订单库,这里历史订单库主要是用于APP端订单查询或者MIS后台管理系统的订单查询,而下单库和成单库通常是做具体的业务处理操作,查询的频次比较少。那么这里就会牵扯到把下单库和成单库的数据同步到历史订单库的操作。类似从A库的M表把数据实时同步到B库的N表的操作。而现有的关系型数据库之间的数据同步通常采用全量同步、基于数据文件导出和导入的全量同步、基于触发器的增量同步、基于时间戳的增量同步等方式。但是这些方式或多或少会存在以下的问题:
一、数据量增大时,每天会有大量重复的配置工作,降低开发人员热情。
二、全量同步的方式,实时性要求比较低,耗时较高。
三、基于文件导入的方式,同步的扩展性较低,人工干预程度高,而且文件解析易出错。
四、基于触发器增量同步的方式,处理数据时,一定是按照自增id的顺序来处理,这种效率会非常低,没办法做批量操作,不然数据会错乱。
五、基于时间戳的增量同步的方式,同步时还需要建一张临时temp表,用来存取每次读取的待同步的数据,也就是把每次从原表中根据时间戳读取到数据先插入到临时表中,每次在插入前,先清空临时表的数据,比较繁琐,占用内存较高。
发明内容
本发明的目的在于提供一种自动化实现数据实时同步的系统,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:一种自动化实现数据实时同步的系统,包括Canal订阅BinLog日志模块、数据配置模块、数据同步模块和数据对账模块,所述Canal订阅BinLog日志模块将同步数据的源数据库对应表的操作日志写入到Kafka对应的Topic中,所述数据配置模块配置管理源数据库的连接信息和Kafka的Topic,所述数据同步模块在数据配置模块相关信息配置完成后进行数据同步服务程序,所述数据同步服务程序获取数据配置模块配置信息并开始监听Kafka的Topic,所述数据同步服务程序读取Kafka集群的相应消息队列数据并插入和更新到相应的目标数据库里的表中,所述数据对账模块每隔一小时对源数据库和目标数据库的数据表进行对此,同时数据对账模块对Canal的延迟情况进行监控,有异常时会及时告警。
优选的,所述Canal订阅BinLog日志模块根据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日志模块中的Canal的实例配置文件和相关基本配置文件配置完成启动Canal服务,其中Canal服务对相关配置的源数据库的表开始进行监听。
优选的,所述数据配置模块中的配置信息在数据同步服务程序里的application.properties文件中配置,完成配置之后,在数据同步服务程序里新建DbConfig类,在该类上加上@Configuration注解,然后通过Spring框架提供的数据库连接的方法。
优选的,所述数据同步模块的数据同步包含以下几个步骤:
步骤1、根据监听的表名声明个监听类,比如监听表create_guest,那么新建个CreateGuestListener类用于接收相应topic的Kafka消息,具体接收方法如下:
@KafkaListener(topics="${create.guest.topic}",groupId="${kafka.listener.group}",containerFactory="kafkaListenerContainerFactory")public void listen(ConsumerRecord<?,?>record,Consumer consumer){//接收到数据后的处理办法};
主要利用@KafkaListener注解进行消费消息,里面的create.guest.topic为当前application.properties文件中配置监听的表名,kafka.listener.group为Kafka的消费组名,kafka Listener Container Factory为当前Kafka容器名,在接收到数据之后,如果需要对某些字段在listen方法中进行处理;
步骤2、声明一个接口类DbDao,里面不定义任何方法,在定义的每个源据库表对应的数据库操作接口类中继承DbDao类,比如处理order_guest表的接口类OrderGuestDao继承DbDao,同时在每个接口类中声明个成员变量,统一名称为TABLE_NAME,代表表名,格式为“数据库.表名”,比如数据库db1的order_guest表,那么定义:
String TABLE_NAME="db1.order_guest";
步骤3、单独对每个需要操作的不同数据库新建个接口操作类,比如对于TripCenter数据库,单独建立个TripCenterDao,里面实现2个方法:
第一种方法为:@Select("select*from information_schema.TABLES whereTABLE_SCHEMA=(select database())");
FlowRes listTable();
第二种方法为:@Select("select*from information_schema.COLUMNS whereTABLE_SCHEMA=(select database())and TABLE_NAME${tableName}")
FlowRes listTableColumn(String tableName);
其中listTable()方法用于获取源数据库的所有表信息,listTableColumn(String tableName)方法,通过输入当源数据库中的某个表名,便可以获取当前表的所有字段信息;
步骤4、定义一个DbMappingBean类,实现接口类ApplicationListener,同时实现其onApplicationEvent(ApplicationEvent event)方法,这里是利用Spring的事件监听机制,调用步骤3定义的listTable()方法,获取需要同步的数据库的信息,然后对每个数据库的表进行遍历,调用listTableColumn(String tableName)方法,获取表的字段信息,然后建立Map<String,String>对象,用于存储遍历出的表信息,Key是表名,Value是当前表字段通过逗号拼接起来的值,这个对象记作tableProperty;
步骤5、在Kafka集群的相应消息队列中去获取数据过程中,里面会有表名信息table,通过表名去匹配上面接口类中定义的TABLE_NAME获取相应的数据库操作接口,同时用表名去步骤5得到的tableProperty里去获取当前表的字段拼接值,然后将这个拼接值和具体的相应字段对应的值组合成插入和更新的Sql语句,便可以完成数据的自动化同步操作;
步骤6、在进行数据同步的过程中,会根据Kafka里拿到的类型值type进行判断,如果是INSERT,就执行插入操作,如果是UPDATE,就执行更新操作;如果数据表字段发生变更,只需要重启同步服务,可以进行数据自动化实时同步,因为表字段在服务重启过程中已经自动化映射到相关类中。
优选的,所述数据对账模块在对源数据库和目标数据库的数据表进行对比操作时,如果中间有数据遗漏,则直接进行补偿操作,同时系统会发出告警给相关开发维护人员,其中补偿操作是指直接通过更新源表中的同步标志位,使得Canal再次订阅此条数据进行同步。
优选的,数据对账模块对Canal的延迟情况进行监控具体利用Canal订阅中的ts、es、now三个值进行比对,ts代表当前数据更新的时间戳的值,es代表Canal订阅的时间戳,now代表当前时间值,其中canal延迟时间用ts–es计算,应用延迟用now–ts计算,具体告警规则是根据ts–es和now-ts的值来定义,并分开告警:如果差值在25-30秒,进行简单告警;如果差值在30-60秒,进行严重告警;如果差值在60秒以上,进行非常严重告警,需要运维人员介入查原因。
与现有技术相比,本发明的有益效果是:本发明相比现有的同步的系统,有以下的优点:1、只需要进行基本的数据库连接信息的配置和需要监听的Kafka Topic的配置,不需要进行额外的任何配置;2、不需要进行全量同步,进行增量的同步,效率高;3、借助Kafka消息中间件的优势,体现在消息传递的速度快,这样可以加快数据实时同步的效率;4、不需要借助数据库的触发器机制进行同步,避免了id自增的限制;5、同步不需要借助时间戳方式,避免了临时表的引入,因为如果表同步的量很大,需要的临时表也会增加,这样需要的内存空间也很大;6、表如果进行了字段变更,不需要进行改代码,只需要重启同步服务即可,表字段会自动化进行映射,减少了人工干预;7、系统对Canal订阅模块进行了全面的监控,如果出现问题会及时进行告警和处理。
附图说明
图1为本发明的MySQL主备复制原理示意图;
图2为本发明的工作关系示意图;
图3为本发明的数据同步架构设计结构示意图。
图中:1、Canal订阅BinLog日志模块;2、数据配置模块;3、数据同步模块;4、数据对账模块;5、源数据库;6、目标数据库。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1-3,本发明提供一种技术方案:一种自动化实现数据实时同步的系统,包括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的延迟情况进行监控,有异常时会及时告警。
进一步的,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的表开始进行监听。
进一步的,数据配置模块2中的配置信息在数据同步服务程序里的application.properties文件中配置,完成配置之后,在数据同步服务程序里新建DbConfig类,在该类上加上@Configuration注解,然后通过Spring框架提供的数据库连接的方法。
进一步的,数据同步模块3的数据同步包含以下几个步骤:
步骤1、根据监听的表名声明个监听类,比如监听表create_guest,那么新建个CreateGuestListener类用于接收相应topic的Kafka消息,具体接收方法如下:
@KafkaListener(topics="${create.guest.topic}",groupId="${kafka.listener.group}",containerFactory="kafkaListenerContainerFactory")public void listen(ConsumerRecord<?,?>record,Consumer consumer){//接收到数据后的处理办法};
主要利用@KafkaListener注解进行消费消息,里面的create.guest.topic为当前application.properties文件中配置监听的表名,kafka.listener.group为Kafka的消费组名,kafka Listener Container Factory为当前Kafka容器名,在接收到数据之后,如果需要对某些字段在listen方法中进行处理;
步骤2、声明一个接口类DbDao,里面不定义任何方法,在定义的每个源据库5表对应的数据库操作接口类中继承DbDao类,比如处理order_guest表的接口类OrderGuestDao继承DbDao,同时在每个接口类中声明个成员变量,统一名称为TABLE_NAME,代表表名,格式为“数据库.表名”,比如数据库db1的order_guest表,那么定义:
String TABLE_NAME="db1.order_guest";
步骤3、单独对每个需要操作的不同数据库新建接口操作类,比如对于TripCenter数据库,单独建立个TripCenterDao,里面实现2个方法:
第一种方法为:@Select("select*from information_schema.TABLES whereTABLE_SCHEMA=(select database())");
FlowRes listTable();
第二种方法为:@Select("select*from information_schema.COLUMNS whereTABLE_SCHEMA=(select database())and TABLE_NAME${tableName}")
FlowRes listTableColumn(String tableName);
其中listTable()方法用于获取源数据库2的所有表信息,listTableColumn(String tableName)方法,通过输入当源数据库2中的某个表名,便可以获取当前表的所有字段信息;
步骤4、定义一个DbMappingBean类,实现接口类ApplicationListener,同时实现其onApplicationEvent(ApplicationEvent event)方法,这里是利用Spring的事件监听机制,调用步骤3定义的listTable()方法,获取需要同步的数据库的信息,然后对每个数据库的表进行遍历,调用listTableColumn(String tableName)方法,获取表的字段信息,然后建立Map<String,String>对象,用于存储遍历出的表信息,Key是表名,Value是当前表字段通过逗号拼接起来的值,这个对象记作tableProperty;
步骤5、在Kafka集群的相应消息队列中去获取数据过程中,里面会有表名信息table,通过表名去匹配上面接口类中定义的TABLE_NAME获取相应的数据库操作接口,同时用表名去步骤5得到的tableProperty里去获取当前表的字段拼接值,然后将这个拼接值和具体的相应字段对应的值组合成插入和更新的Sql语句,便可以完成数据的自动化同步操作;
步骤6、在进行数据同步的过程中,会根据Kafka里拿到的类型值type进行判断,如果是INSERT,就执行插入操作,如果是UPDATE,就执行更新操作;如果数据表字段发生变更,只需要重启同步服务,可以进行数据自动化实时同步,因为表字段在服务重启过程中已经自动化映射到相关类中。
进一步的,数据对账模块4在对源数据库5和目标数据库6的数据表进行对比操作时,如果中间有数据遗漏,则直接进行补偿操作,同时系统会发出告警给相关开发维护人员,其中补偿操作是指直接通过更新源表中的同步标志位,使得Canal再次订阅此条数据进行同步。
进一步的,数据对账模块4对Canal的延迟情况进行监控具体利用Canal订阅中的ts、es、now三个值进行比对,ts代表当前数据更新的时间戳的值,es代表Canal订阅的时间戳,now代表当前时间值,其中canal延迟时间用ts–es计算,应用延迟用now–ts计算,具体告警规则是根据ts–es和now-ts的值来定义,并分开告警:如果差值在25-30秒,进行简单告警;如果差值在30-60秒,进行严重告警;如果差值在60秒以上,进行非常严重告警,需要运维人员介入查原因。
本发明相比现有的同步的系统,有以下的优点:1、只需要进行基本的数据库连接信息的配置和需要监听的Kafka Topic的配置,不需要进行额外的任何配置;2、不需要进行全量同步,进行增量的同步,效率高;3、借助Kafka消息中间件的优势,体现在消息传递的速度快,这样可以加快数据实时同步的效率;4、不需要借助数据库的触发器机制进行同步,避免了id自增的限制;5、同步不需要借助时间戳方式,避免了临时表的引入,因为如果表同步的量很大,需要的临时表也会增加,这样需要的内存空间也很大;6、表如果进行了字段变更,不需要进行改代码,只需要重启同步服务即可,表字段会自动化进行映射,减少了人工干预;7、系统对Canal订阅模块进行了全面的监控,如果出现问题会及时进行告警和处理。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

Claims (6)

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文件中配置监听的表名,kafka.listener.group为Kafka的消费组名,kafka Listener Container Factory为当前Kafka容器名,在接收到数据之后,如果需要对某些字段在listen方法中进行处理;
步骤2、声明一个接口类DbDao,里面不定义任何方法,在定义的每个源据库(5)表对应的数据库操作接口类中继承DbDao类,比如处理order_guest表的接口类OrderGuestDao继承DbDao,同时在每个接口类中声明个成员变量,统一名称为TABLE_NAME,代表表名,格式为“数据库.表名”,比如数据库db1的order_guest表,那么定义:
String TABLE_NAME="db1.order_guest";
步骤3、单独对每个需要操作的不同数据库新建个接口操作类,比如对于TripCenter数据库,单独建立个TripCenterDao,里面实现2个方法:
第一种方法为:@Select("select*frominformation_schema.TABLES where TABLE_SCHEMA=(select database())");
FlowRes listTable();
第二种方法为:@Select("select*frominformation_schema.COLUMNS where TABLE_SCHEMA=(select database())and TABLE_NAME${tableName}")
FlowRes listTableColumn(String tableName);
其中listTable()方法用于获取源数据库(2)的所有表信息,listTableColumn(StringtableName)方法,通过输入当源数据库(2)中的某个表名,便可以获取当前表的所有字段信息;
步骤4、定义一个DbMappingBean类,实现接口类ApplicationListener,同时实现其onApplicationEvent(ApplicationEvent event)方法,这里是利用Spring的事件监听机制,调用步骤3定义的listTable()方法,获取需要同步的数据库的信息,然后对每个数据库的表进行遍历,调用listTableColumn(String tableName)方法,获取表的字段信息,然后建立Map<String,String>对象,用于存储遍历出的表信息,Key是表名,Value是当前表字段通过逗号拼接起来的值,这个对象记作tableProperty;
步骤5、在Kafka集群的相应消息队列中去获取数据过程中,里面会有表名信息table,通过表名去匹配上面接口类中定义的TABLE_NAME获取相应的数据库操作接口,同时用表名去步骤5得到的tableProperty里去获取当前表的字段拼接值,然后将这个拼接值和具体的相应字段对应的值组合成插入和更新的Sql语句,便可以完成数据的自动化同步操作;
步骤6、在进行数据同步的过程中,会根据Kafka里拿到的类型值type进行判断,如果是INSERT,就执行插入操作,如果是UPDATE,就执行更新操作;如果数据表字段发生变更,只需要重启同步服务,可以进行数据自动化实时同步,因为表字段在服务重启过程中已经自动化映射到相关类中。
5.根据权利要求1所述的一种自动化实现数据实时同步的系统,其特征在于:所述数据对账模块(4)在对源数据库(5)和目标数据库(6)的数据表进行对比操作时,如果中间有数据遗漏,则直接进行补偿操作,同时系统会发出告警给相关开发维护人员,其中补偿操作是指直接通过更新源表中的同步标志位,使得Canal再次订阅此条数据进行同步。
6.根据权利要求1所述的一种自动化实现数据实时同步的系统,其特征在于:数据对账模块(4)对Canal的延迟情况进行监控具体利用Canal订阅中的ts、es、now三个值进行比对,ts代表当前数据更新的时间戳的值,es代表Canal订阅的时间戳,now代表当前时间值,其中canal延迟时间用ts–es计算,应用延迟用now–ts计算,具体告警规则是根据ts–es和now-ts的值来定义,并分开告警:如果差值在25-30秒,进行简单告警;如果差值在30-60秒,进行严重告警;如果差值在60秒以上,进行非常严重告警,需要运维人员介入查原因。
CN202110618313.3A 2021-06-02 2021-06-02 一种自动化实现数据实时同步的系统 Pending CN113468170A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110618313.3A CN113468170A (zh) 2021-06-02 2021-06-02 一种自动化实现数据实时同步的系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110618313.3A CN113468170A (zh) 2021-06-02 2021-06-02 一种自动化实现数据实时同步的系统

Publications (1)

Publication Number Publication Date
CN113468170A true CN113468170A (zh) 2021-10-01

Family

ID=77872097

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110618313.3A Pending CN113468170A (zh) 2021-06-02 2021-06-02 一种自动化实现数据实时同步的系统

Country Status (1)

Country Link
CN (1) CN113468170A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113938497A (zh) * 2021-12-17 2022-01-14 中证信用增进股份有限公司 一种基于消息中间件的数据同步方法、装置及系统
CN115470302A (zh) * 2022-10-25 2022-12-13 以萨技术股份有限公司 一种基于canal的数据库双向同步方法、介质及设备
CN117240711A (zh) * 2023-09-15 2023-12-15 合芯科技有限公司 一种集群管理工具配置文件自动更新方法、装置及设备
CN117349297A (zh) * 2023-12-06 2024-01-05 江西云眼视界科技股份有限公司 一种基于表结构变更的数据交换方法及系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015062181A1 (zh) * 2013-11-04 2015-05-07 广东电子工业研究院有限公司 用于实现多源异构数据资源自动同步的方法
CN109284334A (zh) * 2018-09-05 2019-01-29 拉扎斯网络科技(上海)有限公司 实时数据库同步方法、装置、电子设备及存储介质
CN109960710A (zh) * 2019-01-16 2019-07-02 平安科技(深圳)有限公司 数据库之间的数据同步方法和系统
CN112307037A (zh) * 2019-07-26 2021-02-02 北京京东振世信息技术有限公司 一种数据同步方法和装置
CN112445863A (zh) * 2020-11-30 2021-03-05 永辉云金科技有限公司 一种数据实时同步方法及系统
CN112507027A (zh) * 2020-12-16 2021-03-16 平安科技(深圳)有限公司 基于Kafka的增量数据同步方法、装置、设备及介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015062181A1 (zh) * 2013-11-04 2015-05-07 广东电子工业研究院有限公司 用于实现多源异构数据资源自动同步的方法
CN109284334A (zh) * 2018-09-05 2019-01-29 拉扎斯网络科技(上海)有限公司 实时数据库同步方法、装置、电子设备及存储介质
CN109960710A (zh) * 2019-01-16 2019-07-02 平安科技(深圳)有限公司 数据库之间的数据同步方法和系统
CN112307037A (zh) * 2019-07-26 2021-02-02 北京京东振世信息技术有限公司 一种数据同步方法和装置
CN112445863A (zh) * 2020-11-30 2021-03-05 永辉云金科技有限公司 一种数据实时同步方法及系统
CN112507027A (zh) * 2020-12-16 2021-03-16 平安科技(深圳)有限公司 基于Kafka的增量数据同步方法、装置、设备及介质

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113938497A (zh) * 2021-12-17 2022-01-14 中证信用增进股份有限公司 一种基于消息中间件的数据同步方法、装置及系统
CN115470302A (zh) * 2022-10-25 2022-12-13 以萨技术股份有限公司 一种基于canal的数据库双向同步方法、介质及设备
CN115470302B (zh) * 2022-10-25 2023-05-09 以萨技术股份有限公司 一种基于canal的数据库双向同步方法、介质及设备
CN117240711A (zh) * 2023-09-15 2023-12-15 合芯科技有限公司 一种集群管理工具配置文件自动更新方法、装置及设备
CN117240711B (zh) * 2023-09-15 2024-05-24 合芯科技有限公司 一种集群管理工具配置文件自动更新方法、装置及设备
CN117349297A (zh) * 2023-12-06 2024-01-05 江西云眼视界科技股份有限公司 一种基于表结构变更的数据交换方法及系统

Similar Documents

Publication Publication Date Title
CN113468170A (zh) 一种自动化实现数据实时同步的系统
WO2020147392A1 (zh) 数据库之间的数据同步方法和系统
CN109063196B (zh) 数据处理方法、装置、电子设备及计算机可读存储介质
CN106250543B (zh) 一种自动化数据查询同步存储方法
US9589041B2 (en) Client and server integration for replicating data
CN110222237A (zh) 数据库表和xml报文的转换方法及其系统
CN111400382A (zh) 一种模型驱动的数据集成中间件及实现方法
CN111913933B (zh) 基于统一支撑平台的电网历史数据管理方法及系统
CN111737355B (zh) 基于MongoDB元数据管理的异构数据源同步的方法及系统
CN114116716A (zh) 一种层次数据检索方法、装置和设备
CN115374102A (zh) 数据处理方法及系统
CN115712623B (zh) 一种基于捕获元数据变更的批量数据容错采集方法
CN108228756A (zh) 基于日志解析技术的PG数据库到Hadoop平台的数据同步复制方法
CN100440803C (zh) 模型化处理网格信息的方法
CN107491558A (zh) 元数据更新方法及装置
CN114969441A (zh) 基于图数据库的知识挖掘引擎系统
CN112000684B (zh) 一种基于trxid实现回环控制的数据库双向同步的方法及工具
CN112052295A (zh) 一种数据同步方法、装置、电子设备和可读存储介质
CN112699118A (zh) 数据同步方法及相应的装置、系统、存储介质
CN111797166B (zh) 准实时简历数据同步方法和装置、电子设备及介质
CN113157701A (zh) 一种oracle数据库的双活机制部署方法及装置
CN114168287A (zh) 任务调度方法及装置、可读存储介质及电子设备
CN112269820A (zh) 一种基于cmsp实现数据批次同步的方法及平台
CN110765212A (zh) 基于数据库为平台的数据同步系统及方法
CN117370470B (zh) 一种动态请求接口实现数据同步的系统和方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination