掌桥专利:专业的专利平台
掌桥专利
首页

一种数据实时同步方法及系统

文献发布时间:2023-06-19 10:06:57



技术领域

本发明涉及数据处理技术领域,尤其涉及一种数据实时同步方法及系统。

背景技术

在去IOE化(去掉IBM的小型服务器、Oracle数据库、EMC存储设备)、拥抱开源的今天,很多互联网公司的OLTP(On-Line Transaction Processing,联机事务处理过程)业务数据会存储在MySQL数据库中。MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。作为大数据平台结构化数据的主要来源,当前主要采用离线批量T+1跑批的方式进行采集。

虽然这种方案的实现简单,但是随着业务的发展,离线全量跑批需要花费的时间越来越长,无法满足下游数仓生产的时间要求;而直接从MySQL数据库中选择大量数据,对MySQL数据库的影响非常大,容易造成慢查询,影响业务线上的正常服务;由于Hive本身的语法不支持更新、删除MySQL语,对于MySQL中发生的更新或删除的数据不能够很好的进行支持,一旦MySQL数据库表结构发生变更,大数据平台的中ETL(Extract-Transform-Load,抽取-转换-加载)及Hive表无法实施感知并做出适时调整,导致数据质量差异。

发明内容

基于此,有必要针对上述技术问题,提供一种数据实时同步方法及系统。

一种数据实时同步方法,包括以下步骤:采用Canal实时获取MySQL数据库中的Binlog日志文件并进行解析,所述Binlog日志文件中包括有第一操作性数据表;将所述Binlog日志文件以json格式发送至Kafka队列缓存;采用SreamSets将缓存在Kafka队列上的Binlog日志文件实时采集到Hive数仓;对所述MySQL数据库中的操作性数据表以预定周期为间隔进行快照存储,获取第二操作性数据表;根据所述第二操作性数据表,对存储在所述Hive数仓中的第一操作性数据表进行Merge操作,更新所述第一操作性数据表。

在其中一个实施例中,所述采用Canal实时获取MySQL数据库中的Binlog日志文件并进行解析包括:Canal向所述MySQL数据库发送MySQL slave协议;接收所述MySQL数据库返回的反馈信息;基于MySQL dump协议生成数据同步请求并发送至所述MySQL数据库;接收所述MySQL数据库返回的binlog日志文件。

在其中一个实施例中,所述Canal包括有:Canal manager、Canal server、Canalclient和Canal standby;所述Canal manager与所述Canal server和所述Canal client连接;所述Canal server和所述Canal client通过ZooKeeper系统与所述Canal standby连接;所述Canal server用于获取所述Binlog日志文件;所述Canal client用于对所述Binlog日志文件进行解析,并将所述Binlog日志文件json格式发送至Kafka队列缓存。

在其中一个实施例中,所述将Binlog日志文件以json格式发送至Kafka队列缓存之后,还包括:实时计算引擎实时消费所述Kafka队列中的数据,进行聚合统计计算,并将计算结果存储于存储引擎中。

在其中一个实施例中,所述采用Canal实时获取MySQL数据库中的Binlog日志文件并进行解析,还包括:配置监听MySQL数据库端的DDL操作;将所述Binlog日志文件中解析得到的库、表、字段的变更操作实时落地至MySQL数据库表中;将变更操作实时通过邮件或短信形式发送至管理端;管理端复核所述变更操作是否合理,若不合理,则回滚或阻止所述变更操作。

一种数据实时同步系统,包括:文件获取模块,用于采用Canal实时获取MySQL数据库中的Binlog日志文件并进行解析,所述Binlog日志文件中包括有第一操作性数据表;文件发送模块,用于将所述Binlog日志文件以json格式发送至Kafka队列缓存;文件采集模块,用于采用StreamSets将缓存在Kafka队列上的Binlog日志文件实时采集到Hive数仓;快照存储模块,用于对所述MySQL数据库中的操作性数据表以预定周期为间隔进行快照存储,获取第二操作性数据表;Merge操作模块,用于根据所述第二操作性数据表,对存储在Hive数仓中的第一操作性数据表进行Merge操作,更新所述第一操作性数据表。

相比于现有技术,本发明的优点及有益效果在于:

1、采用Canal实时获取MySQL数据库中的Binlog日志文件,并将Binlog日志文件以json格式发送至Kafka队列中,采用SreamSets将缓存在Kafka队列上的Binlog日志文件实时采集到Hive数仓,能够在不影响MySQL数据库的前提下,快速获取Binlog日志文件;

2、对MySQL数据库中的操作性数据表以预定周期为间隔进行快照存储,获取第二操作性数据表;根据第二操作性数据表,对存储在Hive数仓中的第一操作性数据表进行Merge操作,更新第一操作性数据表,能够及时对Hive数仓中的操作性数据表进行更新,提高数据同步的效率。

附图说明

图1为一个实施例中一种数据实时同步方法的流程示意图;

图2为一个实施例中Binlog日志文件的实时采集流程图;

图3为一个实施例中一种数据实时同步系统的结构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,下面通过具体实施方式结合附图对本发明做进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

在一个实施例中,如图1所示,提供了一种数据实时同步方法,包括以下步骤:

步骤S101,采用Canal实时获取MySQL数据库中的Binlog日志文件并进行解析,Binlog日志文件中包括有第一操作性数据表。

其中,Canal是一款开源项目,基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL。

其中,Binlog(Binary log,二进制日志文件)日志文件记录了MySQL数据库中所有的插入、删除和修改的操作,通过Binlog日志文件能够对MySQL数据库中存储的数据进行复制。

其中,操作性数据表中存放着从业务系统直接抽取过来的数据,且是以分布式文件的形式进行存储的。

步骤S102,将Binlog日志文件以json格式发送至Kafka队列缓存。

其中,Kafka是基于Zookeeper协调的分布式日志系统,将Binlog日志文件发送至Kafka队列中能够有效监控前端用户的交易行为,且便于下端系统消费Binlog日志文件。

步骤S103,采用StreamSets将缓存在Kafka队列上的Binlog日志文件实时采集到Hive数仓。

其中,Streamsets是一款大数据实时采集和ETL(extract,抽取;transform,转换;load,加载)工具,可以实现不写一行代码完成数据的采集和流转,通过拖拽式的可视化界面,实现数据管道(Pipelines)的设计和定时任务调度。因此,通过Streamsets能够实现将Kafka队列中的Binlog日志文件实时采集到Hive数仓中。

步骤S104,对MySQL数据库中的操作性数据表以预定周期为间隔进行快照存储,获取第二操作性数据表。

具体地,在获取MySQL数据库中的第一操作性数据表之后,可以预定周期为间隔,对MySQL数据库中的操作性数据表进行快照存储,获取第二操作性数据表,从而能够针对第二操作性数据表,对第一操作性数据表进行对应的更新;使得Hive数仓中的操作性数据表能够根据MySQL数据库中的变更进行及时的更新。

步骤S105,根据第二操作性数据表,对存储在Hive数仓中的第一操作性数据表进行Merge操作,更新第一操作性数据表。

具体地,Merge操作包括有UPDATE和INSERT语句,根据第二操作性数据表对第一操作性数据表进行查询,连接条件匹配上的进行UPDATE(更新)操作,无法匹配的执行INSERT(插入)操作,能够通过一次全表扫描就完成全部工作,执行效率高于UPDATE+INSERT。

具体地,通过Merge操作能够实现对Hive数仓中的操作性数据的快速更新,使得Hive数仓中的操作性数据能够与MySQL数据库中的操作性数据始终保持一致。

在本实施例中,采用Canal实时获取MySQL数据库中的Binlog日志文件,并将Binlog日志文件以json格式发送至Kafka队列中,采用SreamSets将缓存在Kafka队列上的Binlog日志文件实时采集到Hive数仓,能够在不影响MySQL数据库的前提下,快速获取Binlog日志文件;对MySQL数据库中的操作性数据表以预定周期为间隔进行快照存储,获取第二操作性数据表;根据第二操作性数据表,对存储在Hive数仓中的第一操作性数据表进行Merge操作,更新第一操作性数据表,能够及时对Hive数仓中的操作性数据表进行更新,提高数据同步的效率。

其中,步骤S101具体包括:Canal向MySQL数据库发送MySQL slave协议;接收MySQL数据库返回的反馈信息;基于MySQL dump协议生成数据同步请求并发送至MySQL数据库;接收MySQL数据库返回的binlog日志文件。

具体地,Canal向MySQL数据库发送MySQL slave协议,伪装成MySQL slave,从而能够实现和MySQL数据库的连接和数据传输。

其中,由于MySQL的Binlog日志文件支持三种格式:Statement、Row和Mixed格式,而只有Row格式的Binlog日志文件记载了变更的数据,因此在获取Binlog日志文件之前,还需要将MySQL数据库的Binlog日志文件调整为Row格式,便于实现数据更新获取服务。

其中,步骤S101还包括:配置监听MySQL数据库端的DDL操作;将Binlog日志文件中解析得到的库、表、字段的变更操作实时落地至MySQL数据库表中;将变更操作实时通过邮件或短信形式发送至管理端;管理端复核所述变更操作是否合理,若不合理,则回滚或阻止所述变更操作。

具体地,DDL操作包括Create(创建)、Alter(添加、删除或修改)、Drop(销毁)等操作。

具体地,将Binlog日志文件中解析得到的库、表、字段的变更操作实时落地至MySQL数据库表中,变更信息可以实时通过邮件或短信形式发送至数据库管理端,管理端的管理人员可以复核变更操作是否合理,并在出现不合理的变更操作时,回滚或阻止该变更操作。

此外,大数据平台相关人员可对照变更操作,甄别大数据平台ETL所涉及的映射逻辑及相关数仓Hive中表,及时作出对照调整,避免源业务系统与大数据平台件的数据差异。

在一个实施例中,如图2所示,Canal包括有:Canal manager、Canal server、Canalclient和Canal standby;Canal manager与Canal server和Canal client连接;Canalserver和Canal client通过ZooKeeper系统与Canal standby连接;Canal server用于获取Binlog日志文件;Canal client用于对Binlog日志文件进行解析,并将Binlog日志文件json格式发送至Kafka队列缓存。

其中,Canal manager为Canal管理器,Canal server为Canal服务器,Canalclient为Canal客户端,Canal standby为Canal备用端。

其中,实线箭头代表的是控制流,虚线箭头表示数据流。Canal server从MySQL数据库中获取Binlog日志文件,并通过Canal client将Binlog日志文件发送至Kafka队列缓存。

具体地,Canal server要启动某个实际运行的数据队列,需要先向Zookeeper进行一次尝试启动判断,通过创建节点进行判断,创建成功就允许启动数据队列;而没有创建成功的数据队列就会处于standby(待命)状态。Canal client的方式与Canal server方式类似,也是利用Zookeeper抢占节点的方式进行控制。

其中,随着业务规模的扩大,MySQL数据库的分库分表情况越来越多,各业务部门的数据根据锁满足场景功能的不同,分散存储在不同主机的不同MySQL数据库中,数据较为分散,而本方法中,可以针对MySQL数据库配置不同的实例,由不同的Canal client并进行Binlog日志文件的解析,将解析结果合并至一个组中,进而落地至一个MySQL数据库中,从而实现数据整合的目的。

其中,步骤S102之后,还包括:实时计算引擎实时消费所述Kafka队列中的数据,进行聚合统计计算,并将计算结果存储于存储引擎中。

具体地,在实际生产中,为了充分满足业务流转的时效性,前端系统只负责将采集的各种用户行为及交互业务数据落地至MySQL数据库中,而不会同时向消息队列,例如Kafka队列中写入;而本方法将Binlog日志文件缓存到Kafka队列中后,后续实时计算引擎可以实时消费Kafka队列中的数据,做各种聚合统计计算,最终的计算结果可以存储在Kudu(存储引擎)中,从而对前端用户的交易行为实现有效监控并能够实时统计展示各指标的交易结果。

如图3所示,提供了一种数据实时同步系统30,包括:文件获取模块31、文件发送模块32、文件采集模块33、快照存储模块34和Merge操作模块35,其中:

文件获取模块31,用于采用Canal实时获取MySQL数据库中的Binlog日志文件并进行解析,Binlog日志文件中包括有第一操作性数据表;

文件发送模块32,用于将所述Binlog日志文件以json格式发送至Kafka队列缓存;

文件采集模块33,用于采用StreamSets将缓存在Kafka队列上的Binlog日志文件实时采集到Hive数仓;

快照存储模块34,用于对所述MySQL数据库中的操作性数据表以预定周期为间隔进行快照存储,获取第二操作性数据表;

Merge操作模块35,用于根据所述第二操作性数据表,对存储在Hive数仓中的第一操作性数据表进行Merge操作,更新所述第一操作性数据表。

在一个实施例中,文件获取模块31还用于Canal向MySQL数据库发送MySQL slave协议;接收MySQL数据库返回的反馈信息;基于MySQL dump协议生成数据同步请求并发送至MySQL数据库;接收MySQL数据库返回的binlog日志文件。

文件获取模块31还用于配置监听MySQL数据库端的DDL操作;将Binlog日志文件中解析得到的库、表、字段的变更操作实时落地至MySQL数据库表中;将变更操作实时通过邮件或短信形式发送至管理端;管理端复核所述变更操作是否合理,若不合理,则回滚或阻止所述变更操作。

以上内容是结合具体的实施方式对本发明所做的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

相关技术
  • 工业以太网数控系统实时与非实时系统内核数据同步方法
  • 实时数据库系统组态数据的同步方法、系统、设备及介质
技术分类

06120112422780