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

数据实时同步方法、装置及计算机可读存储介质

文献发布时间:2023-06-19 11:32:36


数据实时同步方法、装置及计算机可读存储介质

技术领域

本申请涉及计算机技术领域,特别是涉及一种数据实时同步方法、装置及计算机可读存储介质。

背景技术

ClickHouse为一个用于OLAP(Online Analytical Processing,联机分析处理)的列式数据库管理系统,随着数据量的大幅增长,其作为计算密集型和存储密集型并重的数据分析引擎,并以其轻量和易使用的特性而被越来越广泛地应用在大数据领域中。使用ClickHouse实时数据分析的首要条件是实现将数据从业务数据库实时同步到ClickHouse中,业务数据库例如可为MySQL数据库、阿里云的RDS这种类MySQL数据库等。数据实时同步是将数据从源数据库迁移至目的数据库,实时数据实时同步则是保证源数据库和目的数据库在全量数据的基础上实时保持一致的过程。

相关技术在将业务数据实时同步到ClickHouse进行OLAP实时数据分析过程中,是将数据落地到Kafka或者消息队列中作为源数据库和目的数据库间的中转地,然后再从中转地将数据最终同步至目的数据库中。但是,这种数据同步方式增加了传输环节,提高了整个系统复杂度,增大数据延迟概率,长时间处理会带来的数据不一致现象,降低数据同步的实时性能,无法满足实时大数据量同步的需求。

发明内容

本申请提供了一种数据实时同步方法、装置及计算机可读存储介质,解决相关技术长时间处理极易出现数据同步不一致的现象,有效提升数据同步的实时性能,满足高性能的实时同步需求。

为解决上述技术问题,本发明实施例提供以下技术方案:

本发明实施例一方面提供了一种数据实时同步方法,应用于Flink分布式框架,包括:

根据源数据库和ClickHouse的配置信息、实时同步任务控制信息从Binlog中读取待处理数据;所述Binlog存储所述源数据库的变化数据;

根据所述待处理数据对应的数据库操作类型,采用相匹配的数据插入操作方式将所述待处理数据写入至内存中;所述操作数据库类型包括数据插入操作、数据删除操作和数据更新操作;

当检测到目的数据库数据导入操作被触发,将所述内存中的数据加载至所述ClickHouse中。

可选的,所述采用相匹配的数据插入操作方式将所述待处理数据写入至内存中之后,还包括:

将所述待处理数据的处理时间点和在所述Binlog中的位置记录在Checkpoint,以将所述Binlog同步位点实时记录在状态中。

可选的,所述采用相匹配的数据插入操作方式将所述待处理数据写入至内存中之后,还包括:

当再次启动数据实时同步任务,自动从故障点对应记录在所述Binlog的位点处恢复所述数据实时同步任务。

可选的,所述当检测到目的数据库数据导入操作被触发,将所述内存中的数据加载至所述ClickHouse中包括:

当检测到存储数据至所述内存中的操作次数达到预设次数阈值或检测到当前时刻到达Checkpoint周期,将所述内存中的数据加载至所述ClickHouse中。

可选的,所述根据所述待处理数据对应的数据库操作类型,采用相匹配的数据插入操作方式将所述待处理数据写入至内存中包括:

预先设置所述数据插入操作方式包括字段和主键,所述字段用于标识操作数据库类型;

若所述待处理数据对应的数据库操作类型为所述数据插入操作,将相应主键的数据写入至所述内存中;

若所述待处理数据对应的数据库操作类型为所述数据删除操作,利用同主键合并功能删除相应数据;

若所述待处理数据对应的数据库操作类型为所述数据更新操作,所述数据插入操作方式包括第一字段和第一主键、第二字段和第二主键;将所述第一主键的数据和所述第二主键的数据顺序写入至所述内存。

可选的,所述根据源数据库和ClickHouse的配置信息、实时同步任务控制信息从Binlog中读取待处理数据之前,还包括:

接收并发度设置指令;

根据所述并发度设置指令中的并发度数设置所述实时同步任务控制信息的任务线程数。

本发明实施例另一方面提供了一种数据实时同步装置,应用于Flink分布式框架,包括:

数据读取模块,用于根据源数据库和ClickHouse的配置信息、实时同步任务控制信息从Binlog中读取待处理数据;所述Binlog存储所述源数据库的变化数据;

数据写入模块,用于根据所述待处理数据对应的数据库操作类型,采用相匹配的数据插入操作方式将所述待处理数据写入至内存中;所述操作数据库类型包括数据插入操作、数据删除操作和数据更新操作;

数据同步模块,用于当检测到目的数据库数据导入操作被触发,将所述内存中的数据加载至所述ClickHouse中。

可选的,还包括状态记录模块,用于将所述待处理数据的处理时间点和在所述Binlog中的位置记录在Checkpoint,以将所述Binlog同步位点实时记录在状态中。

本发明实施例还提供了一种数据实时同步装置,包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如前任一项所述数据实时同步方法的步骤。

本发明实施例最后还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有数据实时同步程序,所述数据实时同步程序被处理器执行时实现如前任一项所述数据实时同步方法的步骤。

本申请提供的技术方案的优点在于,使用Flink分布式框架将源数据库的插入、更新、删除的业务数据均可在内存中进行转换和传输,实现了源端到目的端ClickHouse的端到端的高性能数据实时同步,保证端到端的数据一致性,解决相关技术长时间处理极易出现数据同步不一致的现象,有效提升数据同步的实时性能,满足高性能的实时同步需求;此外,Flink分布式框架还可以根据实际需要调整并发度,进一步满足高性能的实时同步需求。

此外,本发明实施例还针对数据实时同步方法提供了相应的实现装置及计算机可读存储介质,进一步使得所述方法更具有实用性,所述装置及计算机可读存储介质具有相应的优点。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。

附图说明

为了更清楚的说明本发明实施例或相关技术的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种数据实时同步方法的流程示意图;

图2为本发明实施例提供的另一种数据实时同步方法的流程示意图;

图3为本发明实施例提供的再一种数据实时同步方法的流程示意图;

图4为本发明实施例提供的数据实时同步装置的一种具体实施方式结构图;

图5为本发明实施例提供的数据实时同步装置的另一种具体实施方式结构图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等是用于区别不同的对象,而不是用于描述特定的顺序。此外术语“包括”和“具有”以及他们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可包括没有列出的步骤或单元。

在介绍了本发明实施例的技术方案后,下面详细的说明本申请的各种非限制性实施方式。

首先参见图1,图1为本发明实施例提供的一种数据实时同步方法的流程示意图,应用于Flink分布式框架,本发明实施例可包括以下内容:

S101:根据源数据库和ClickHouse的配置信息、实时同步任务控制信息从Binlog中读取待处理数据。

可以理解的是,数据同步是将数据从源数据库迁移至目的数据库的过程,而实时数据同步则是在系统运行过程中,保证源数据库和目的数据库在全量数据的基础上实时保持一致,也就是说,数据的实时同步过程是在数据同步基础上的增量数据更新过程,如图2所示。源数据库是待处理数据的存储位置,ClickHouse作为目的数据库作为待处理数据即将要迁移的位置,源数据库中的数据例如可通过replicate操作即以指定次数重复字符表达式的形式将在数据同步后发生变化的数据或称为增量数据写入服务器节点中,并同时写入至二进制日志Binlog中,Binlog存储源数据库的变化数据,Flink分布式框架通过canal从Binlog中读取数据,然后调用Flink分布式框架中的Binlog解析器如binlogmt Reader来解析数据,并通过Flink分布式框架中的数据处理器如ClickHouse Writer将解析的数据进行转换后写入ClickHouse中。binlog文件可默认存放位置为数据库文件所在目录下。若源数据库为MySQL,则binlog记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中。binlog可以用来查看数据库的变更历史如具体的时间点所有的SQL操作、数据库增量备份和恢复如增量备份和基于时间点的恢复、Mysql的复制如主主数据库的复制、主从数据库的复制。实时同步任务控制信息用于表示待处理数据为源数据库中的哪些数据、存储在源数据库的哪个位置、待处理数据对应的数据库操作类型是什么、待处理数据的目标字段类型、如何处理待处理数据等,也即实时同步任务控制信息用于明确待处理的数据和将要执行的具体任务。

S102:根据待处理数据对应的数据库操作类型,采用相匹配的数据插入操作方式将所述待处理数据写入至内存中。

本申请的操作数据库类型包括数据插入操作、数据删除操作和数据更新操作。ClickHouse由于是列式存储的数据库,和其他列式存储产品如HBase,Kudu一样,在数据导入时全部是顺序append写,写入后的数据不可更改,其更新和删除的操作是以mutation机制实现的,对性能影响较大,官方不推荐使用。所以目前ClickHouse的数据同步包括实时同步都仅支持插入数据,而不支持数据的修改和删除。而源数据库如随机读写的行式数据库MySQL数据库,不可避免地有大量的更新和删除数据的操作,针对这一点,本实施例可利用ClickHouse的Replacing Merge Tree引擎,实现了实时同步MySQL的数据插入、更新和删除操作,保证端到端的数据一致性,而不是仅支持数据的插入。

S103:当检测到目的数据库数据导入操作被触发,将内存中的数据加载至ClickHouse中。

为了减少数据频繁写入造成资源占用太大带来的不利影响,同时还需要保证数据实时保持一致,满足实时大数据量同步的需求,避免长时间处理带来的数据不一致。可预先设置目的数据库数据导入操作触发条件,在检测到满足目的数据库数据导入操作条件,从Flink分布式框架的内存中将数据写入至ClickHouse中。触发条件例如可为:当检测到存储数据至内存中的操作次数达到预设次数阈值或检测到当前时刻到达Checkpoint周期,将内存中的数据加载至ClickHouse中。

本实施例基于Flink开发,将业务数据实时同步到ClickHouse进行OLAP实时数据分析,是一种解决大数据实时计算或分析的轻量级解决方案,或者可以作为HTAP(HybridTransaction and Analytical Process,混合事务和分析处理)系统中的底层将数据从来源端经过抽取extract、转换transform、加载load至目的端的实时ETL(Extract-Transform-Load)工具。

在本发明实施例提供的技术方案中,使用Flink分布式框架将源数据库的插入、更新、删除的业务数据均可在内存中进行转换和传输,实现了源端到目的端ClickHouse的端到端的高性能数据实时同步,保证端到端的数据一致性,解决相关技术长时间处理极易出现数据同步不一致的现象,有效提升数据同步的实时性能,满足高性能的实时同步需求;此外,Flink分布式框架还可以根据实际需要调整并发度,进一步满足高性能的实时同步需求。

在上述实施例中,对于如何执行步骤S102并不做限定,本申请结合图3还给出了一种实施方式,在从Binlog解析并提取得到源待处理数据后,基于读取的待处理数据的目的表字段也即字符类型如是整型还是float型将待处理数据转化为ClickHouse可识别并可处理的数据后,在将这些数据通过Flink分布式框架写入至ClickHouse可包括下述内容:

可预先设置数据插入操作方式包括字段和主键,字段用于标识操作数据库类型,主键的数据为执行插入操作对应的数据。若待处理数据对应的数据库操作类型为数据插入操作,将相应主键的数据写入至内存中;若待处理数据对应的数据库操作类型为数据删除操作,利用它的同主键合并功能删除相应数据;若待处理数据对应的数据库操作类型为数据更新操作,数据插入操作方式包括第一字段和第一主键、第二字段和第二主键;将第一主键的数据和第二主键的数据顺序写入至内存中。第一字段用于标识执行数据删除操作,第二字段用于标识执行数据写入操作。

结合图3所示,也就是说,在数据同步过程中,源数据库可将需要实时同步更新的数据写入至源表中,目的数据库将实时同步过来的数据写入至目的表中,为了实现将所有类型的增量数据均实时更新,ClickHouse中实时同步的目的表可使用ReplacingMergeTree的数据引擎,MergeTree是ClickHouse里面使用最多的数据引擎,支持海量数据,支持索引,支持分区;ReplacingMergeTree是其升级版,支持按照_version字段保留主键相同多行数据的最新一行,其他行在数据合并后自动消除。也即本实施例可将源数据库如MySQL端源表的任何增删更新操作都转化成ClickHouse端的插入操作,插入的是数据的最新版本如_version字段最大值,如果是删除操作_sign字段会变成-1,表示删除这条主键的数据。如果要获取表的有效数据,使用以下ClickHouse SQL即可:select*from table final where_sign=1。

本实施例是源端到目的的端到端的实时数据同步,数据在内存中进行转换和传输,是一种端到端的高效、实时ETL工具的实现。

可以理解的是,实时数据同步过程中不可避免由于断电、宕机、系统运行出错等原因导致实时数据同步任务结束,本申请还提供了一个使得系统具有故障恢复能力的实施例,在出现任务故障失败时,能够从之前任务的故障点进行恢复,保证任务具备断点续传的特性。在S102根据待处理数据对应的数据库操作类型,采用相匹配的数据插入操作方式将待处理数据写入至内存中之后,还可包括下述内容:

将待处理数据的处理时间点和在Binlog中的位置记录在Checkpoint,以将Binlog同步位点实时记录在状态中。当再次启动数据实时同步任务,自动从故障点对应记录在Binlog的位点处恢复数据实时同步任务。

CheckPoint是通过给程序快照的方式使得将历史某些时刻的状态保存下来,当任务挂掉之后,默认从最近一次保存的完整快照处进行恢复任务。Flink分布式框架中的状态state概念为:flink中有状态函数和运算符在各个元素element/事件event的处理过程中存储的数据。状态数据可以修改和查询,可以自己维护,根据自己的业务场景,保存历史数据或者中间结果到状态state中。利用Flink的checkpoint机制,可将binlog同步位点实时记录到Flink的state中,例如可每10秒state会通过checkpoint记录下来,如果发生同步故障,重启的任务会自动从checkpoint中恢复之前记录的binlog同步位点,实现故障点的自动恢复,而无需像同类实时同步产品一样要确定具体的binlog位点,再进行故障恢复。

本实施例的再次启动数据实时同步任务可为由于故障引起的数据实时同步任务中断被迫退出而再次重启,也可为人为原因主动退出数据实时同步任务后再次启动,或者是其他什么原因导致的数据实时同步任务退出之后,再次重启操作。不仅

本实施例将Binlog如binlog的同步位点信息实时记录到state中,如果实时同步的任务发生故障,利用Flink的checkpoint机制,state会记录到文件系统中。等再次启动任务时,只要源端数据库的Binlog中的数据没有被清除或者是位点没有过期,便可以自动从故障点时记录的binlog位点恢复任务,保证实时同步任务的数据的不丢失。

为了提升实用性,提升用户使用性能,本申请还提供了实时同步任务控制信息中的一个参数的生成方式,可包括:

接收并发度设置指令;

根据并发度设置指令中的并发度数设置实时同步任务控制信息的任务线程数。

本实施例采用Flink分布式框架实现实时数据同步,运行时可采用Flink on Yarn模式。可以根据需要在实时同步任务控制信息中调节ClickHouse的写入并发度,每个并发相当于一个任务线程,任务的写入性能和并发度线性正相关。

需要说明的是,本申请中各步骤之间没有严格的先后执行顺序,只要符合逻辑上的顺序,则这些步骤可以同时执行,也可按照某种预设顺序执行,图1-图3只是一种示意方式,并不代表只能是这样的执行顺序。

本发明实施例还针对数据实时同步方法提供了相应的装置,进一步使得方法更具有实用性。其中,装置可从功能模块的角度和硬件的角度分别说明。下面对本发明实施例提供的数据实时同步装置进行介绍,下文描述的数据实时同步装置与上文描述的数据实时同步方法可相互对应参照。

基于功能模块的角度,参见图4,图4为本发明实施例提供的数据实时同步装置在一种具体实施方式下的结构图,应用于Flink分布式框架,该装置可包括:

数据读取模块401,用于根据源数据库和ClickHouse的配置信息、实时同步任务控制信息从Binlog中读取待处理数据;Binlog存储源数据库的变化数据。

数据写入模块402,用于根据待处理数据对应的数据库操作类型,采用相匹配的数据插入操作方式将待处理数据写入至内存中;操作数据库类型包括数据插入操作、数据删除操作和数据更新操作。

数据同步模块403,用于当检测到目的数据库数据导入操作被触发,将内存中的数据加载至ClickHouse中。

可选的,在本实施例的一些实施方式中,上述装置还可以包括状态记录模块,用于将待处理数据的处理时间点和在Binlog中的位置记录在Checkpoint,以将Binlog同步位点实时记录在状态中。

作为本实施例的一些实施方式,上述装置还可包括故障恢复模块,用于当再次启动数据实时同步任务,自动从故障点对应记录在Binlog的位点处恢复数据实时同步任务。

作为本实施例的其他一些实施方式,上述装置还可包括并发度设置模块,用于根据接收到的并发度设置指令中的并发度数设置实时同步任务控制信息的任务线程数。

可选的,在本实施例的另一些实施方式中,上述数据写入模块402可以具体用于:预先设置数据插入操作方式包括字段和主键,字段用于标识操作数据库类型;若待处理数据对应的数据库操作类型为数据插入操作,将相应主键的数据写入至内存中;若待处理数据对应的数据库操作类型为数据删除操作,利用同主键合并功能删除相应数据;若待处理数据对应的数据库操作类型为数据更新操作,数据插入操作方式包括第一字段和第一主键、第二字段和第二主键;将第一主键的数据和第二主键的数据顺序写入至内存。

作为本实施例的一些实施方式,上述数据同步模块403可具体用于当检测到存储数据至内存中的操作次数达到预设次数阈值或检测到当前时刻到达Checkpoint周期,将内存中的数据加载至ClickHouse中。

本发明实施例所述数据实时同步装置的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。

由上可知,本发明实施例解决相关技术长时间处理极易出现数据同步不一致的现象,有效提升数据同步的实时性能,满足高性能的实时同步需求。

上文中提到的数据实时同步装置是从功能模块的角度描述,进一步的,本申请还提供一种数据实时同步装置,是从硬件角度描述。图5为本申请实施例提供的另一种数据实时同步装置的结构图。如图5所示,该装置包括存储器50,用于存储计算机程序;

处理器51,用于执行计算机程序时实现如上述任一实施例提到的数据实时同步方法的步骤。

其中,处理器51可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器51可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器51也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器51可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器51还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。

存储器50可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器50还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器50至少用于存储以下计算机程序501,其中,该计算机程序被处理器51加载并执行之后,能够实现前述任一实施例公开的数据实时同步方法的相关步骤。另外,存储器50所存储的资源还可以包括操作系统502和数据503等,存储方式可以是短暂存储或者永久存储。其中,操作系统502可以包括Windows、Unix、Linux等。数据503可以包括但不限于数据实时同步结果对应的数据等。

在一些实施例中,数据实时同步装置还可包括有显示屏52、输入输出接口53、通信接口54、电源55以及通信总线56。

本领域技术人员可以理解,图5中示出的结构并不构成对数据实时同步装置的限定,可以包括比图示更多或更少的组件,例如还可包括传感器57。

本发明实施例所述数据实时同步装置的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。

由上可知,本发明实施例解决相关技术长时间处理极易出现数据同步不一致的现象,有效提升数据同步的实时性能,满足高性能的实时同步需求。

可以理解的是,如果上述实施例中的数据实时同步方法以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、磁碟或者光盘等各种可以存储程序代码的介质。

基于此,本发明实施例还提供了一种计算机可读存储介质,存储有数据实时同步程序,所述数据实时同步程序被处理器执行时如上任意一实施例所述数据实时同步方法的步骤。

本发明实施例所述计算机可读存储介质的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。

由上可知,本发明实施例解决相关技术长时间处理极易出现数据同步不一致的现象,有效提升数据同步的实时性能,满足高性能的实时同步需求。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

以上对本申请所提供的一种数据实时同步方法、装置及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

相关技术
  • 数据实时同步方法、装置及计算机可读存储介质
  • 数据同步方法、装置、计算机可读存储介质和计算机设备
技术分类

06120112965842