1.本发明属于数据处理技术领域,尤其涉及一种数据实时同步的方法、装置、设备及存储介质。
背景技术:2.搜索引擎elasticsearch(简称es)可以作为mysql的异构数据源,弥补mysql分库分表查询的缺陷。es是一个开源的、分布式的、高性能搜索引擎,每个字段都可以作为索引字段进行搜索。但是使用es会存在相应的问题,例如,如何将mysql中的数据近实时地同步存储到es中,也就是数据一致性问题,此外,在数据同步存储的过程中,由于各节点程序运行异常或者网络波动等原因,有可能会造成部分同步数据丢失,当此场景发生时,如何对丢失数据进行补偿,确保数据完整性。
3.目前,基于如下两种方式,实现mysql与es数据实时同步:1.通过应用之间同步接口调用实现;2.通过应用之间异步消息通信实现。但是,第一种实现方式,耦合度高,无论是接口调用方应用还是接口提供方应用出现了系统异常,都会影响实时业务;更有甚者,可能引发系统性风险;第二种实现方式,虽然实现了各应用之间的解耦;但是,如果依赖业务应用发送或消费消息来实现mysql与es的同步,也会对实时业务造成一定的影响。
4.除此之外,现有的异构数据源同步方案,不能自动检测数据源之间的差异,也无法规避意外发生导致的数据丢失问题。
技术实现要素:5.本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明的一个目的在于提出一种数据实时同步的方法、装置、设备及存储介质。
6.为了解决上述技术问题,本发明的实施例提供如下技术方案:
7.一种数据实时同步的方法,包括:
8.基于同步系统创建多个es索引;
9.所述同步系统基于更新数据,创建异构数据;
10.所述同步系统将所述异构数据写入对应的所述es索引;
11.所述同步系统将所述es的每个操作信息发送至补偿系统;
12.所述补偿系统基于所述操作信息,确定补偿目标。
13.可选的,所述基于同步系统创建多个es索引,包括:
14.所述同步系统基于mysql数据表的数据模型以及查询业务需求,创建多个所述es索引。
15.可选的,所述同步系统基于更新数据,创建异构数据,包括:
16.基于所述mysql数据表创建第一kafka消息队列;
17.若所述mysql数据表出现数据变动,mysql生成与所述数据变动对应的binlog;所述数据变动包括数据创建或数据更新;
18.所述mysql将与所述binlog对应的binlog事件发送至所述第一kafka消息队列。
19.可选的,所述同步系统基于更新数据,创建异构数据,还包括:
20.所述第一kafka消息队列的消费者对所述第一kafka消息队列进行实时监听;
21.当所述第一kafka消息队列的消费者监听到所述binlog事件,所述同步系统对所述binlog事件进行解析,获取解析结果;
22.所述同步系统基于所述解析结果创建异构数据。
23.可选的,所述同步系统将所述异构数据写入对应的所述es索引,包括:
24.将所述异构数据基于所述查询业务需求写入对应的所述es索引。
25.可选的,所述同步系统将所述es的每个操作信息发送至补偿系统,包括:
26.所述同步系统基于所述es的每个所述操作信息生成操作事件;
27.所述同步系统将所述操作事件发送至所述补偿系统的第二kafka消息队列。
28.可选的,所述补偿系统基于所述操作信息,确定补偿目标,包括:
29.所述第二kafka消息队列的消费者对所述第二kafka消息队列进行监听;
30.当所述第二kafka消息队列的消费者监听到所述操作事件;
31.所述补偿系统将所述操作事件存储到mysql的es操作信息表;
32.对所述es操作信息表进行回流,获取回流数据;
33.所述补偿系统基于所述回流数据,确定所述补偿目标。
34.可选的,所述补偿系统基于所述回流数据,确定所述补偿目标,包括:
35.所述补偿系统对所述回流数据进行组装,获取组装数据;其中,所述组装数据与所述es的数据的结构一致;
36.所述补偿系统将所述组装数据存入所述mysql的回流数据表;
37.所述补偿系统基于所述回流数据表,确定所述补偿目标。
38.可选的,所述补偿系统基于所述回流数据,确定所述补偿目标,包括:
39.预设时间间隔;
40.每间隔预设时间间隔,对所述es操作数据表的信息以及所述回流表的信息进行比对;
41.若所述es操作数据表的信息与所述回流表的信息不一致,则获取差异数据;
42.所述补偿系统基于所述差异数据,确定所述补偿目标。
43.可选的,所述补偿系统基于所述差异数据,确定所述补偿目标后,还包括:
44.所述补偿系统将所述补偿目标按照查询业务需求,存储至所述es索引。
45.本发明的实施例还提供一种数据实时同步的装置,包括:
46.第一创建模块,用于基于同步系统创建多个es索引;
47.第二创建模块,用于所述同步系统基于更新数据,创建异构数据;
48.写入模块,用于所述同步系统将所述异构数据写入对应的所述es索引;
49.发送模块,用于所述同步系统将所述es的每个操作信息发送至补偿系统;
50.补偿模块,用于所述补偿系统基于所述操作信息,确定补偿目标。
51.本发明的实施例还提供一种电子设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的方法。
52.本发明的实施例还提供一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如上所述的方法。
53.本发明的实施例,具有如下技术效果:
54.本发明的上述技术方案,实现了mysql和es数据的实时同步,数据无须通过mysql全库全表扫描进行查询,而可以直接从es索引中查询,提高了数据查询效率,满足了海量数据查询需求,且完全解耦了业务处理与数据同步;此外,异构数据源之间的定时比较,自动补偿各种意外导致的数据丢失,在无须人工干预的情况下确保了数据的完整性。
55.本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
56.图1是本发明实施例提供的数据实时同步的方法的流程示意图;
57.图2是本发明实施例提供的同步系统的执行流程示意图;
58.图3是本发明实施例提供的补偿系统的执行流程示意图;
59.图4是本发明实施例提供的数据实时同步的装置的结构示意图。
具体实施方式
60.下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
61.为了便于本领域的技术人员对实施例的理解,对部分用语进行了解释:
62.(1)es:elasticsearch,搜索服务器。
63.(2)mysql:一种关系型数据库管理系统。
64.(3)kafka:一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据;这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。
65.(4)binlog:二进制日志文件,用于记录mysql的数据更新或者潜在更新。
66.(5)datax:一个异构数据源离线同步工具。
67.(6)blcs:boundary layer control system,附面层控制系统。
68.(7)producer:消息的生成者。
69.(8)consumer:消息的消费者。
70.(9)broker:每一个kafka实例(或者说每台kafka服务器节点)就是一个broker。
71.(10)dc:数据中心操作系统。
72.(11)odps:open data processing service,一项大数据计算服务。
73.(12)rds:relational database service,关系型数据库服务。
74.如图1所示,本发明的实施例提供一种数据实时同步的方法,包括:
75.步骤s1:基于同步系统创建多个es索引;
76.具体的,所述基于同步系统创建es索引,包括:
77.所述同步系统基于mysql数据表的数据模型以及查询业务需求,创建多个所述es索引。
78.在实际应用场景中,基于mysql数据表的数据模型以及实际的查询业务需求创建es索引,作为mysql的异构数据,es索引字段可对mysql数据表的数据进行补充和转换,并且按照实际业务场景,可按冷、热搜索数据划分,创建多个es索引。
79.步骤s2:所述同步系统基于更新数据,创建异构数据;
80.具体的,所述同步系统基于更新数据,创建异构数据,包括:
81.基于所述mysql数据表创建第一kafka消息队列;
82.若所述mysql数据表出现数据变动,mysql生成与所述数据变动对应的binlog;所述数据变动包括数据创建或数据更新;
83.所述mysql将与所述binlog对应的binlog事件发送至所述第一kafka消息队列。
84.在实际应用场景中,基于mysql数据表创建第一kafka消息队列,当mysql数据表产生数据创建或更新时,mysql产生的binlog会作为事件被同步系统发送到相应的第一kafka消息队列。
85.具体的,所述同步系统基于更新数据,创建异构数据,还包括:
86.所述第一kafka消息队列的消费者对所述第一kafka消息队列进行实时监听;
87.当所述第一kafka消息队列的消费者监听到所述binlog事件,所述同步系统对所述binlog事件进行解析,获取解析结果;
88.所述同步系统基于所述解析结果创建异构数据。
89.其中,同步系统按照规则将解析结果组装成异构数据,例如,按照保单数据、被保人等规则将解析结果组装成异构数据。
90.在实际应用场景中,同步系统负责监听第一kafka消息队列中mysql生成的binlog消息,并按规则解析binlog消息,组装成异构数据同步存储到es索引中。
91.binlog是mysql的二进制日志,它记录了所有的数据定义语言(ddl)和数据操纵语言(dml)(除了数据查询语句)语句,并以事件形式记录。因此,每当mysql数据表发生数据创建和更新时,都会有binlog生成,只要es能成功记录每条binlog组装成的异构数据,就可以保证mysql和es两个数据源的一致性;而且binlog的生成和事件发送基本是近实时操作,可实现mysql和es同步的零延迟。
92.步骤s3:所述同步系统将所述异构数据写入对应的所述es索引;
93.具体的,所述同步系统将所述异构数据写入对应的所述es索引,包括:
94.将所述异构数据基于所述查询业务需求写入对应的所述es索引。
95.其中,写入es索引成功以后,同步系统将本次es操作信息作为事件发送至补偿系统的第二kafka消息队列,以便于后续的数据补偿。
96.在实际应用场景中,同步系统可能出现无法保证es能成功记录每条binlog组装成的异构数据的情况;
97.例如:程序运行异常或者网络波动等原因都可能导致意外发生,基于这个原因本发明的实施例还设置了补偿系统。
98.步骤s4:所述同步系统将所述es的每个操作信息发送至补偿系统;
99.具体的,所述同步系统将所述es的每个操作信息发送至补偿系统,包括:
100.所述同步系统基于所述es的每个所述操作信息生成操作事件;
101.所述同步系统将所述操作事件发送至所述补偿系统的第二kafka消息队列。
102.本发明的实施例,构建了同步系统,监听mysql主从复制产生的binlog,解析binlog并按规则组装成异构数据存储到es索引中;binglog的生成基本接近实时,可以确保数据同步的实时性,而由独立的同步系统监听mysql的binlog,则完全解耦了业务处理与数据同步。
103.如图2所示,本发明的上述实施例,可以基于如下实现方式实现:
104.(1)同步系统基于mysql数据表创建第一kafka消息队列,当mysql数据表产生数据创建或更新时,mysql基于producer产生的binlog会作为事件发送到相应的第一kafa消息队列;
105.(2)broker1以及broker2对第一kafa消息队列的数据进行缓存以及处理。
106.(3)consumer实时监听消息队列,当监听到binlog事件时,对事件进行解析,并将解析结果按规则组装成异构数据;
107.(4)同步系统将异构数据按查询业务需求写入相应的es索引。
108.步骤s5:所述补偿系统基于所述操作信息,确定补偿目标。
109.具体的,所述补偿系统基于所述操作信息,确定补偿目标,包括:
110.所述第二kafka消息队列的消费者对所述第二kafka消息队列进行监听;
111.当所述第二kafka消息队列的消费者监听到所述操作事件;
112.所述补偿系统将所述操作事件存储到mysql的es操作信息表;
113.对所述es操作信息表进行回流,获取回流数据;
114.所述补偿系统基于所述回流数据,确定所述补偿目标。
115.本发明的实施例,在独立于同步系统之外,还构建了补偿系统,可以定时回流mysql在一定时间段内的数据至mysql回流表,并将回流数据组装成和es数据结构一致的数据,然后将回流数据与es数据作比较,基于比较结果补偿丢失的数据。
116.具体的,所述补偿系统基于所述回流数据,确定所述补偿目标,包括:
117.所述补偿系统对所述回流数据进行组装,获取组装数据;其中,所述组装数据与所述es的数据的结构一致;
118.所述补偿系统将所述组装数据存入所述mysql的回流数据表;
119.所述补偿系统基于所述回流数据表,确定所述补偿目标。
120.在实际应用场景中,使用datax定时回流mysql数据表,并且将回流的数据按规则组装成和es数据结构一致的数据,存入mysql中的mysql回流表。
121.具体的,所述补偿系统基于所述回流数据,确定所述补偿目标,包括:
122.预设时间间隔;
123.每间隔预设时间间隔,对所述es操作数据表的信息以及所述回流表的信息进行比对;
124.若所述es操作数据表的信息与所述回流表的信息不一致,则获取差异数据;
125.所述补偿系统基于所述差异数据,确定所述补偿目标。
126.在实际应用场景中,按照一定的预设时间间隔比较es操作信息表和mysql回流表,用于发现两者的差异;
127.其中,补偿系统负责回流mysql数据,并且实时保存es成功存储的数据,每间隔预设时间间隔,将mysql回流数据和es成功存储的数据进行比较,并自动补偿es中缺失的数据,以确保这个时间段内mysql和es的数据一致;其中,预设时间间隔可以是1小时、30分钟、10分钟、5分钟等任意时间段,甚至可以是实时,对此,补偿系统不做具体的限定。
128.具体的,所述补偿系统基于所述差异数据,确定所述补偿目标后,还包括:
129.所述补偿系统将所述补偿目标按照查询业务需求,存储至所述es索引。
130.其中,当获取差异数据后,则补偿系统可以确定补偿目标,并将补偿目标以同样的方式存储至es索引。
131.例如,在补偿系统获取差异数据以后,将差异数据发送至同步系统;同步系统基于差异数据创建补偿es索引;mysql数据表基于差异数据出现数据变动,然后,mysql生成与所述数据变动对应的补偿binlog;所述mysql将补偿binlog事件发送至所述第一kafka消息队列;所述第一kafka消息队列的消费者对所述第一kafka消息队列进行实时监听;当所述第一kafka消息队列的消费者监听到所述补偿binlog事件,所述同步系统对补偿binlog事件进行解析,获取补偿解析结果;所述同步系统基于所述补偿解析结果创建补偿异构数据;所述同步系统将所述补偿异构数据基于所述查询业务需求写入对应的所述补偿es索引。
132.本发明的实施例,实现了mysql和es数据的实时同步,数据无须通过mysql全库全表扫描进行查询,而可以直接从es索引中查询,提高了数据查询效率,满足了海量数据查询需求,且完全解耦了业务处理与数据同步;此外,异构数据源之间的定时比较,自动补偿各种意外导致的数据丢失,在无须人工干预的情况下确保了数据的完整性。
133.如图3所示,本发明的实施例,可以基于如下实现方式实现:
134.(1)补偿系统基于odps进行数据回流,其中,将rds延迟1小时执行,每小时执行1次;同时,es数据汇总(es操作信息表汇总)按照1小时汇总,每小时汇总1次;
135.(2)每小时对回流数据以及汇总的es操作信息表进行比对;
136.(3)确认是否有差异,若无差异,则结束补偿流程,若有差异,则将差异结果以消息形式发出;
137.(4)基于步骤(3)发出的消息使得kafa数据表出现数据更新,并最终生成补偿binlog事件;
138.(5)dc对补偿binlog事件进行解析,获取补偿异构数据;
139.(6)补偿系统将补偿异构数据写入相应的补偿es索引。
140.如图4所示,本发明的实施例还提供一种数据实时同步的装置400,包括:
141.第一创建模块401,用于基于同步系统创建多个es索引;
142.第二创建模块402,用于所述同步系统基于更新数据,创建异构数据;
143.写入模块403,用于所述同步系统将所述异构数据写入对应的所述es索引;
144.发送模块404,用于所述同步系统将所述es的每个操作信息发送至补偿系统;
145.补偿模块405,用于所述补偿系统基于所述操作信息,确定补偿目标。
146.可选的,所述基于同步系统创建多个es索引,包括:
147.所述同步系统基于mysql数据表的数据模型以及查询业务需求,创建多个所述es索引。
148.可选的,所述同步系统基于更新数据,创建异构数据,包括:
149.基于所述mysql数据表创建第一kafka消息队列;
150.若所述mysql数据表出现数据变动,mysql生成与所述数据变动对应的binlog;所述数据变动包括数据创建或数据更新;
151.所述mysql将与所述binlog对应的binlog事件发送至所述第一kafka消息队列。可选的,所述同步系统基于更新数据,创建异构数据,还包括:
152.所述第一kafka消息队列的消费者对所述第一kafka消息队列进行实时监听;
153.当所述第一kafka消息队列的消费者监听到所述binlog事件,所述同步系统对所述binlog事件进行解析,获取解析结果;
154.所述同步系统基于所述解析结果创建异构数据。
155.可选的,所述同步系统将所述异构数据写入对应的所述es索引,包括:
156.将所述异构数据基于所述查询业务需求写入对应的所述es索引。
157.可选的,所述同步系统将所述es的每个操作信息发送至补偿系统,包括:
158.所述同步系统基于所述es的每个所述操作信息生成操作事件;
159.所述同步系统将所述操作事件发送至所述补偿系统的第二kafka消息队列。
160.可选的,所述补偿系统基于所述操作信息,确定补偿目标,包括:
161.所述第二kafka消息队列的消费者对所述第二kafka消息队列进行监听;
162.当所述第二kafka消息队列的消费者监听到所述操作事件;
163.所述补偿系统将所述操作事件存储到mysql的es操作信息表;
164.对所述es操作信息表进行回流,获取回流数据;
165.所述补偿系统基于所述回流数据,确定所述补偿目标。
166.可选的,所述补偿系统基于所述回流数据,确定所述补偿目标,包括:
167.所述补偿系统对所述回流数据进行组装,获取组装数据;其中,所述组装数据与所述es的数据的结构一致;
168.所述补偿系统将所述组装数据存入所述mysql的回流数据表;
169.所述补偿系统基于所述回流数据表,确定所述补偿目标。
170.可选的,所述补偿系统基于所述回流数据,确定所述补偿目标,包括:
171.预设时间间隔;
172.每间隔预设时间间隔,对所述es操作数据表的信息以及所述回流表的信息进行比对;
173.若所述es操作数据表的信息与所述回流表的信息不一致,则获取差异数据;
174.所述补偿系统基于所述差异数据,确定所述补偿目标。
175.可选的,所述补偿系统基于所述差异数据,确定所述补偿目标后,还包括:
176.所述补偿系统将所述补偿目标按照查询业务需求,存储至所述es索引。
177.本发明的实施例还提供一种电子设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的方法。
178.本发明的实施例还提供一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如上所述的方法。
179.另外,本发明实施例的装置的其他构成及作用对本领域的技术人员来说是已知的,为减少冗余,此处不做赘述。
180.需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
181.应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。
182.在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
183.在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”、“顺时针”、“逆时针”、“轴向”、“径向”、“周向”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
184.此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
185.在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定。对于本领域的普通技术人员
而言,可以根据具体情况理解上述术语在本发明中的具体含义。
186.在本发明中,除非另有明确的规定和限定,第一特征在第二特征“上”或“下”可以是第一和第二特征直接接触,或第一和第二特征通过中间媒介间接接触。而且,第一特征在第二特征“之上”、“上方”和“上面”可是第一特征在第二特征正上方或斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”可以是第一特征在第二特征正下方或斜下方,或仅仅表示第一特征水平高度小于第二特征。
187.尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。