CN112347143A - 多数据流处理方法、装置、终端及存储介质 - Google Patents
多数据流处理方法、装置、终端及存储介质 Download PDFInfo
- Publication number
- CN112347143A CN112347143A CN202011305312.5A CN202011305312A CN112347143A CN 112347143 A CN112347143 A CN 112347143A CN 202011305312 A CN202011305312 A CN 202011305312A CN 112347143 A CN112347143 A CN 112347143A
- Authority
- CN
- China
- Prior art keywords
- data stream
- final result
- data
- result table
- field information
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, 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)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种多数据流处理方法、装置、终端及存储介质,其方法包括:接收消息中间件发送的多条数据流,并获取每条数据流的类型;提取多条数据流中类型为插入的第一数据流,利用Flink窗口功能将第一数据流插入到预先构建的最终结果表中;提取多条数据流中类型为非插入的第二数据流,构建同步表,并利用Flink窗口功能将第二数据流插入到同步表中;合并同步表和预先构建的最终结果表,以对最终结果表中相应的字段进行更新,得到新的最终结果表。通过上述方式,本发明能够在保证数据完整性和准确性的情况下,利用Flink处理消息中间件发送的类型为插入或更新的多条数据量。
Description
技术领域
本申请涉及数据处理技术领域,特别是涉及一种多数据流处理方法、装置、终端及存储介质。
背景技术
在数据处理领域,数据处理的方式在某种划分方式下可被划分为批处理和流处理两类,批处理即将一定量数据打包统一处理,计算时间是可估量有边界的,而流处理则是不停地进行计算,程序一旦启动便不会停止,数据量和处理任务耗时是无限增长。
Flink框架在流数据和批数据处理领域被广泛应用,这是因为Flink能够大规模执行,具有非常高的吞吐量,即使在无序或者数据延迟的情况下也能提供正确的结果。受益于Flink的优秀性能和exactly once语义,我们可以很简便的使用Flink SQL进行实时业务的开发。对于单数据流,Flink可以保证数据的正确性,但对于多数据流,Flink就难以满足需求,消息乱序到达和迟到都会导致最终数据的遗漏或者错误。目前,主要会出现下述两种情况:
(1)从消息中间件发送过来的数据流可划分为插入、更新等不同类型,其中类型为插入的数据流数据完整,可由Flink直接执行插入操作,而类型为更新的数据流内容不完整,只包括要修改的字段和对应的数据,其余不需要修改的字段和数据则为空。而Flink只支持插入操作,因此,处理类型为更新的数据流,直接进行更新会导致不需要更新的数据丢失。从消息中间件发送过来的数据可以分为插入和非插入两种类型,其中类型为插入时,数据流的字段是完整的,而Flink SQL支持数据插入,而当类型为非插入时,数据流的字段是不完整的,例如,带有更新类型的数据流,其中只有主键信息和需要变更的字段信息,而Flink SQL不支持数据按字段更新,当直接对更新的数据流进行操作时,会将最终结果表中不需要更新的字段置为空,造成数据丢失;
(2)存在关联性的多条数据流在进行更新时,可能会出现更新数据丢失的问题,例如,通过数据流1的某个字段限定了数据量,数据流2和数据流3是通过关联键和数据流1进行关联取对应字段,相当于限定条件在数据流1里,数据流2、数据流3与数据流1关联从而限定数据流2、数据流3的数据量,这样数据流之间的联系可能会导致当数据流1延迟到达时,数据流2、数据流3的数据已经丢失,或者是数据流2、数据流3有更新,但是数据流1并没有发生更新,同样会导致数据流2和数据流3需要更新的数据丢失。
发明内容
本申请提供一种多数据流处理方法、装置、终端及存储介质,已解决现有的Flink在处理多数据流时会存在准确性和完整性不高的问题。
为解决上述技术问题,本申请采用的一个技术方案是:提供一种多数据流处理方法,包括:接收消息中间件发送的多条数据流,并获取每条数据流的类型;提取多条数据流中类型为插入的第一数据流,利用Flink窗口功能将第一数据流插入到预先构建的最终结果表中;提取多条数据流中类型为非插入的第二数据流,构建同步表,并利用Flink窗口功能将第二数据流插入到同步表中;合并同步表和预先构建的最终结果表,以对最终结果表中相应的字段进行更新,得到新的最终结果表。
作为本申请的进一步改进,提取多条数据流中类型为非插入的第二数据流,构建同步表,并利用Flink窗口功能将第二数据流插入到同步表中,包括:提取多条数据流中类型为非插入的第二数据流;从第二数据流中提取出第二字段信息,并与最终结果表中的字段信息进行比对,以确认最终结果表中的待更新的第一字段信息;构建同步表;利用Flink窗口功能将第二字段信息和第二字段信息对应的数据存储至同步表中。
作为本申请的进一步改进,合并同步表和预先构建的最终结果表,以对最终结果表中相应的字段进行更新,得到新的最终结果表,包括:利用第二字段信息对应的数据更新掉最终结果表中待更新的第一字段信息的数据,且最终结果表中其余字段的数据不变,得到新的最终结果表。
作为本申请的进一步改进,提取多条数据流中类型为非插入的第二数据流之后,还包括:判断针对于同一字段信息的第二数据流的数量是否超过一条;若是,则获取针对于同一字段信息的所有第二数据流的事件时间;选取事件时间最新的第二数据流作为用于更新同一字段信息的最终的第二数据流,并删除其余第二数据流。
作为本申请的进一步改进,利用Flink窗口功能将第二字段信息和第二字段信息对应的数据存储至同步表中之后,还包括:当数据流的类型为删除时,在同步表中为第二字段信息和第二字段信息对应的数据打上删除标签。
作为本申请的进一步改进,得到新的最终结果表之后,还包括:将新的最终结果表存储至存储器中,并删除同步表。
作为本申请的进一步改进,得到新的最终结果表之后,还包括:将新的最终结果表上传至区块链。
为解决上述技术问题,本申请采用的另一个技术方案是:提供一种多数据流处理装置,包括:获取模块,用于接收消息中间件发送的多条数据流,并获取每条数据流的类型;第一处理模块,用于提取多条数据流中类型为插入的第一数据流,利用Flink窗口功能将第一数据流插入到预先构建的最终结果表中;第二处理模块,用于提取多条数据流中类型为非插入的第二数据流,构建同步表,并利用Flink窗口功能将第二数据流插入到同步表中;合并模块,用于合并同步表和预先构建的最终结果表,以对最终结果表中相应的字段进行更新,得到新的最终结果表。
为解决上述技术问题,本申请采用的再一个技术方案是:提供一种终端,该终端包括处理器、与处理器耦接的存储器,其中,存储器存储有用于实现上述多数据流处理方法的程序指令;处理器用于执行存储器存储的程序指令以利用Flink处理类型不同的多条数据量流。
为解决上述技术问题,本申请采用的再一个技术方案是:提供一种存储介质,存储有能够实现上述多数据流处理方法的程序文件。
本申请的有益效果是:本申请的多数据流处理方法通过当接收到消息中间件发送的数据流时,获取数据流的类型,并判断数据流的类型是更新还是插入,当数据流的类型的是更新时,则利用Flink窗口功能将数据流的数据插入到另一张同步表中,然后通过合并同步表和最终结果表,从而对对最终结果表中相应的字段进行更新,其解决了Flink不支持更新最终结果表中的某些字段的功能,并且,通过上述方式,即使多数据流之间存在关联且消息中间件发送数据流时存在乱序到达或延迟到达的问题,其同样能够完美地将数据更新至最终结果表,而不会导致数据丢失或遗漏,保证了最终数据的完整性和准确性。
附图说明
图1是本发明第一实施例的多数据流处理方法的流程示意图;
图2是本发明第二实施例的多数据流处理方法的流程示意图;
图3是本发明第三实施例的多数据流处理方法的流程示意图;
图4是本发明实施例的多数据流处理装置的结构示意图;
图5是本发明实施例的终端的结构示意图;
图6是本发明实施例的存储介质的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请中的术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”、“第三”的特征可以明示或者隐含地包括至少一个该特征。本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。本申请实施例中所有方向性指示(诸如上、下、左、右、前、后……)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
图1是本发明第一实施例的多数据流处理方法的流程示意图。需注意的是,若有实质上相同的结果,本发明的方法并不以图1所示的流程顺序为限。如图1所示,该方法包括步骤:
步骤S101:接收消息中间件发送的多条数据流,并获取每条数据流的类型。
需要说明的是,在分布式系统中,会广泛使用各种消息中间件来进行系统间的数据交换,以便于各系统之间实现异步解耦。现有的常用消息中间件包括ActiveMQ、Kafka、RocketMQ、RabbitMQ四种。本实施例中,该消息中间件优先为Kafka,Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目,Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,Kafka中的消息由键、值、时间戳组成,其可以指定消费者来实现订阅发布的功能。
在步骤S1中,在接收到消息中间件发送的多条数据流之后,获取每条数据流的类型。通常地,数据流的类型主要可以划分为插入、更新,其中插入是指将数据流插入至最终结果中,更新是指对最终结果中的部分字段的内容进行更新,更新的前提是已经插入了数据,然后对插入的数据进行更新。现有的Flink计算引擎只支持将数据插入至最终结果中,而不支持更新功能,导致数据流的类型是更新时,会存在数据丢失的问题。例如,当数据流1的类型为插入时,其包括的A、B、C、D四个字段的数据均会插入到最终结果中;当数据流2的类型为更新,且目的是更新数据流1中的B字段时,其通常只包括B字段的新数据,而不会包括A、C、D的字段的数据,若直接使用Flink窗口功能将数据流2插入至最终结果中,则B字段的数据会被替换为新数据,但A、C、D字段会以空值的方式插入至最终结果中,导致A、C、D字段的数据丢失。本实施例中,将数据流的类型划分为插入和非插入,非插入包括更新和删除。
步骤S102:提取多条数据流中类型为插入的第一数据流,利用Flink窗口功能将第一数据流插入到预先构建的最终结果表中。
具体地,窗口是Flink流计算的核心,窗口将数据流流分成有限大小的“存储块”,然后在其上进行应用计算。Flink提供了非常完善的窗口机制,在流处理应用中,数据是连续不断的,因此不可能等到所有数据都到了才开始处理,当然也可以每来一个消息就处理一次,但是有时需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击了我们的网页,在这种情况下,必须定义一个窗口,用来收集最近一分钟内的数据,并对这个窗口内的数据进行计算。窗口可以是基于时间驱动的(Time Window,例如:每30秒钟),也可以是基于数据驱动的(Count Window,例如:每一百个元素),同时基于不同事件驱动的窗口又可以分成以下几类:翻滚窗口、滑动窗口、会话窗口、全局窗口。
需要说明的是,在执行本实施例的步骤之前,需要先构建最终结果表,构建最终结果表的步骤包括:构建数据表,并初始化所述数据表,得到初始的最终结果表。
具体地,在第一次实施本实施例的基于Flink SQL的多数据流处理方法时,此时最终结果表还未建立,需要先建立一最终结果表,用以存储数据。在最终结果表建立之后,当接收到的消息中间件发送的数据流理论上都是插入类型的数据流(最终结果表中还没有可以更新的数据),此时,利用Flink窗口功能将接收到的插入类型的数据流插入到新建立的最终结果表中,得到最初始的最终结果表,而该最终结果表中记录了所有插入类型数据流的所有字段信息和字段对应的数据流,即该最终结果表是一个全量数据表。
在步骤S102中,通过将消息中间件发送的多条数据流中,类型为插入的第一数据流提取出来,再利用Flink窗口功能将第一数据流插入到最终结果表中,从而扩充最终结果表的内容。而扩充至最终结果表中的内容后续可被更新。
具体地,利用Flink窗口功能将第一数据流插入到最终结果表中的步骤,具体包括:
1、从第一数据流中提取出第一字段信息和第一字段信息对应的数据。
具体地,数据流中包括了字段信息和字段对应的具体数据信息。
2、利用Flink窗口功能将第一字段信息插入至最终结果表中,再将第一字段信息对应的数据插入到最终结果表中相应的位置。
步骤S103:提取多条数据流中类型为非插入的第二数据流,构建同步表,并利用Flink窗口功能将第二数据流插入到同步表中。
在步骤S103中,从多条数据流中提取出类型为更新的第二数据流之后,构建一个同步表,再利用Flink窗口功能将第二数据流插入到同步表中。其中,利用Flink窗口功能将第二数据流插入到同步表中请参阅上述利用Flink窗口功能将第一数据流插入到最终结果表中的过程,此处不再赘述。
需要说明的是,该同步表的表结构与最终结果表的表结构可以相同或不同。当同步表的表结构与最终结果表的表结构相同时,同步表中除了需要更新的第二字段信息和其对应的数据外,其余字段均取空值。当同步表与最终结果表不同时,同步表可以只包括需要更新的第二字段信息和其对应的数据。数据流的更新是针对于已经插入的数据流的数据而言,因此,同步表是一个只需要存储发生更新的字段信息和字段对应的数据的增量数据表,而最终结果表则是一个包括了所有字段和其对应的数据的全量数据表,利用该增量数据表即可对全量数据表中相应的字段进行更新。
步骤S104:合并同步表和预先构建的最终结果表,以对最终结果表中相应的字段进行更新,得到新的最终结果表。
在步骤S104中,将同步表和最终结果表进行合并,从而利用同步表将最终结果表中相应的字段进行更新,其不需要直接向最终结果表中插入类型为更新的数据流,防止覆盖掉其他未进行更新的数据,导致数据丢失,而是通过另外建立一个同步表,将数据流插入到同步表中,再合并同步表与最终结果表,从而实现对最终结果表中相应字段的更新,有效的解决了Flink在处理类型为更新的数据流时会导致数据丢失的问题。此外,通过该同步表来更新最新结果表中的方式,使得当多数据流存在关联时,即使用于限定其他数据流数据量的主要数据流延迟到达或者未发生更新,其也不会导致其他数据流的数据丢失,例如,数据流1于数据流2、数据流3关联,且用于限定数据流2和数据流3的数据量,当数据流2和数据流3进行更新时,即使数据流1延迟到达,数据流2和数据流3的数据也不会丢失,而是通过同步表的方式更新到最终结果表中。
本发明第一实施例的多数据流处理方法通过当接收到消息中间件发送的数据流时,获取数据流的类型,并判断数据流的类型是非插入还是插入,当数据流的类型的是非插入时,则利用Flink窗口功能将数据流的数据插入到同步表中,然后通过合并同步表和最终结果表,从而对对最终结果表中相应的字段进行更新,其解决了Flink不支持更新最终结果表中的部分字段的功能,并且,通过上述方式,即使多数据流之间存在关联且消息中间件发送数据流时存在乱序到达或延迟到达的问题,其同样能够完美地将数据更新至最终结果表,而不会导致数据丢失或遗漏,保证了最终数据的完整性和准确性。
进一步的,得到新的最终结果表之后,还包括:将新的最终结果表上传至区块链。
具体地,基于新的最终结果表得到对应的摘要信息,具体来说,摘要信息由新的最终结果表进行散列处理得到,比如利用sha256s算法处理得到。将摘要信息上传至区块链可保证其安全性和对用户的公正透明性。用户设备可以从区块链中下载得该摘要信息,以便查证新的最终结果表是否被篡改。本示例所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
图2是本发明第二实施例的多数据流处理方法的流程示意图。需注意的是,若有实质上相同的结果,本发明的方法并不以图2所示的流程顺序为限。如图2所示,该方法包括步骤:
步骤S201:接收消息中间件发送的多条数据流,并获取每条数据流的类型。
在本实施例中,图2中的步骤S201和图1中的步骤S101类似,为简约起见,在此不再赘述。
步骤S202:提取多条数据流中类型为插入的第一数据流,利用Flink窗口功能将第一数据流插入到预先构建的最终结果表中。
在本实施例中,图2中的步骤S202和图1中的步骤S102类似,为简约起见,在此不再赘述。
步骤S203:提取多条数据流中类型为非插入的第二数据流。
进一步的,为了保证存储至最终结果表中的数据为最新数据,在步骤S203之后,还包括:
1、判断针对于同一字段信息的第二数据流的数量是否超过一条。
具体地,消息中间件发送的多条数据流中,可能会存在针对于同一字段的数据流的数量超过一条的情况,例如,在极短的时间内对同一字段信息的数据进行连续修改,则有可能会导致消息中间件发送的数据流中存在两条或以上的数据流针对同一字段信息。
2、若是,则获取针对于同一字段信息的所有第二数据流的事件时间。
需要说明的是,该事件时间是指事件发生的时间。通常地,Flink支持三种时间概念,分别为处理时间、事件时间和摄入时间。
处理时间是指执行相应操作机器的系统时间。当流程序在处理时间运行时,所有基于时间的操作(如时间窗口)将使用当前运行机器的系统时间。每小时处理时间窗口包括在系统时间每小时内到达的所有指定操作记录。例如:如果应用程序在上午9:15开始运行,第一个小时处理时间窗口将包括上午9:15到10:00之间处理的事件,下一个窗口将包含上午10:00到11:00之间处理的事件,以此类推。处理时间是最简单的时间概念,不需要数据流和机器之间的协调,具有最好的性能和最低的延迟。然而,在分布式和异步环境中,处理时间具有不确定性,容易受到系统之间操作记录传输速度以及中断的影响,导致数据延迟。
事件时间是每个独立事件在其生成设备上发生的时间,通常是指在进入到Flink之前就嵌入在数据流中的时间,并且可以从每个数据流中提取事件时间戳。事件时间处理将产生完全一致和确定的结果,无论事件何时到达或顺序如何。假设所有数据都已到达,事件时间操作将按照预期进行,即使在处理无序延迟的事件或重新处理历史数据,也会产生正确一致的结果。
摄入时间是事件进入Flink的时间,在源操作中每个记录都会获得源的当前时间作为时间戳,后续基于时间的操作(如:time window)会依赖这个时间戳。摄入时间从概念上来讲是处在事件时间和处理时间之间。与事件时间相比,摄入时间程序不能处理任何无序事件或者延迟事件。
本实施例中,为了避免无序的事件或延迟数据对最终结果的影响,采用事件时间来确认各数据流之间的顺序。
3、选取事件时间最新的第二数据流作为用于更新同一字段信息的最终的第二数据流,并删除其余第二数据流。
具体地,当针对于同一字段信息的第二数据流的数量超过一条时,则获取针对于同一字段信息的所有第二数据流的事件时间,然后从中挑选出事件时间最先的第二数据流作为该同一字段信息的最终的第二数据流,其余的第二数据流则删除,不需要插入到同步表中。
Flink能够支持基于事件时间语义进行窗口计算,这种基于事件驱动的机制使得事件即使乱序到达,流系统也能够计算出精确的结果,保持了事件原本产生时的时序性,尽可能避免网络传输或硬件系统的影响。
需要理解的是,在一些实施例中:当针对于同一字段信息的数据流中存在类型为插入的第一数据流和类型为更新的第二数据流时,先利用Flink窗口功能将类型为插入的第一数据流插入到最终结果表中,再利用Flink窗口功能将类型为更新的第二数据流插入到同步表中,即插入类型数据流的优先级高于更新类型的数据流,将插入类型的数据流处理完之后,再处理更新类型的数据流,最后利用同步表对最终结果表进行更新。
步骤S204:从第二数据流中提取出第二字段信息,并与最终结果表中的字段信息进行比对,以确认最终结果表中的待更新的第一字段信息。
具体地,消息中间件发送的第二数据流中包括了字段信息和字段对应的数据。当数据流的类型为更新时,则最终结果表中必定存在与该数据流的第二字段信息对应的第一字段信息,通过利用第二字段信息与最终结果表进行比对,即可确认出待更新的第一字段信息。
步骤S205:构建同步表。
步骤S206:利用Flink窗口功能将第二字段信息和第二字段信息对应的数据存储至同步表中。
进一步的,数据流的类型还包括删除,步骤S206之后,还包括:当数据流的类型为删除时,在同步表中为第二字段信息和第二字段信息对应的数据打上删除标签。
具体地,针对于删除类型的第二数据流,本实施例通过为所述第二字段信息和第二字段信息对应的数据打上删除标签,再利用同步表将其更新到最终结果表中,从而将最终结果表中对应的字段信息和数据打上删除标签,以表示该字段信息和数据被删除。
步骤S207:合并同步表和预先构建的最终结果表,以对最终结果表中相应的字段进行更新,得到新的最终结果表。
在本实施例中,图2中的步骤S207和图1中的步骤S104类似,为简约起见,在此不再赘述。
进一步的,步骤S207包括:利用第二字段信息对应的数据更新掉最终结果表中待更新的第一字段信息的数据,且最终结果表中其余字段的数据不变,得到新的最终结果表。
具体地,利用第二字段信息对应的数据对待更新的第一字段信息的数据进行更新,从而完成对最终结果表的更新,而最终结果表中的其余第一字段信息的数据则不会发生变化,也不会被覆盖,避免丢失。
本发明第二实施例的多数据流处理方法在第一实施例的基础上,通过提取多数据流中的所有第二数据流,然后从第二数据流中提取出第二字段信息,并与最终结果表进行对比,从而确定最终结果表中需要更新的第一字段信息,在将第二字段信息和第二字段信息对应的数据插入至同步表之后,利用同步表与最终结果过进行合并,从而将利用第二字段信息的数据更新最终结果表中第一字段信息的数据。并且,在获取到第二数据流之后,当针对于同一字段信息的第二数据流的数量超过一条时,则分析每条第二数据流的事件时间,选取事件时间最近的一个第二数据流作为最终的第二数据流,来对最终结果表中相应的字段信息进行更新,保持了事件原本产生时的时序性。
图3是本发明第三实施例的多数据流处理方法的流程示意图。需注意的是,若有实质上相同的结果,本发明的方法并不以图3所示的流程顺序为限。如图3所示,该方法包括步骤:
步骤S301:接收消息中间件发送的多条数据流,并获取每条数据流的类型。
在本实施例中,图3中的步骤S301和图1中的步骤S101类似,为简约起见,在此不再赘述。
步骤S302:提取多条数据流中类型为插入的第一数据流,利用Flink窗口功能将第一数据流插入到预先构建的最终结果表中。
在本实施例中,图3中的步骤S302和图1中的步骤S102类似,为简约起见,在此不再赘述。
步骤S303:提取多条数据流中类型为非插入的第二数据流,构建同步表,并利用Flink窗口功能将第二数据流插入到同步表中。
在本实施例中,图3中的步骤S303和图1中的步骤S103类似,为简约起见,在此不再赘述。
步骤S304:合并同步表和预先构建的最终结果表,以对最终结果表中相应的字段进行更新,得到新的最终结果表。
在本实施例中,图3中的步骤S304和图1中的步骤S104类似,为简约起见,在此不再赘述。
步骤S305:将新的最终结果表存储至存储器中,并删除同步表。
具体地,在更新最终结果表之后,删除同步表,避免同步表占用过多内存,提升资源利用率。
本发明第三实施例的多数据流处理方法在第一实施例的基础上,在利用同步表将第二数据流更新值最终结果表中之后,存在该新的最终结果表,用于后续继续更新货插入数据,并且,还通过在得到新的最终结果表之后,删除同步表,避免同步表占用内存,提升资源利用率。
图4是本发明实施例的多数据流处理装置的功能模块示意图。如图4所示,该装置40包括获取模块41、第一处理模块42、第二处理模块43和合并模块44。
获取模块41,用于接收消息中间件发送的多条数据流,并获取每条数据流的类型。
第一处理模块42,用于提取多条数据流中类型为插入的第一数据流,利用Flink窗口功能将第一数据流插入到预先构建的最终结果表中。
第二处理模块43,用于提取多条数据流中类型为非插入的第二数据流,构建同步表,并利用Flink窗口功能将第二数据流插入到同步表中。
合并模块44,用于合并同步表和预先构建的最终结果表,以对最终结果表中相应的字段进行更新,得到新的最终结果表。
可选地,第二处理模块43提取多条数据流中类型为非插入的第二数据流,构建同步表,并利用Flink窗口功能将第二数据流插入到同步表中的操作还可以为:第二处理模块43提取多条数据流中类型为非插入的第二数据流;从第二数据流中提取出第二字段信息,并与最终结果表中的字段信息进行比对,以确认最终结果表中的待更新的第一字段信息;构建同步表;利用Flink窗口功能将第二字段信息和第二字段信息对应的数据存储至同步表中。
可选地,合并模块44合并同步表和预先构建的最终结果表,以对最终结果表中相应的字段进行更新,得到新的最终结果表的操作还可以为:合并模块44利用第二字段信息对应的数据更新掉最终结果表中待更新的第一字段信息的数据,且最终结果表中其余字段的数据不变,得到新的最终结果表。
可选地,第二处理模块43提取多条数据流中类型为非插入的第二数据流的操作之后,还包括:第二处理模块43判断针对于同一字段信息的第二数据流的数量是否超过一条;若是,则获取针对于同一字段信息的所有第二数据流的事件时间;选取事件时间最新的第二数据流作为用于更新同一字段信息的最终的第二数据流,并删除其余第二数据流。
可选地,第二处理模块43利用Flink窗口功能将第二字段信息和第二字段信息对应的数据存储至同步表中的操作之后,还包括:第二处理模块43当数据流的类型为删除时,在同步表中为第二字段信息和第二字段信息对应的数据打上删除标签。
可选地,合并模块44得到新的最终结果表的操作之后,还包括:合并模块44将新的最终结果表存储至存储器中,并删除同步表。
可选地,合并模块44得到新的最终结果表之后,还包括:合并模块44将新的最终结果表上传至区块链。
关于上述实施例多数据流处理装置中各模块实现技术方案的其他细节,可参见上述实施例中的多数据流处理方法中的描述,此处不再赘述。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
请参阅图5,图5为本发明实施例的终端的结构示意图。如图5所示,该终端50包括处理器51及和处理器51耦接的存储器52。
存储器52存储有用于实现上述任一实施例所述的多数据流处理方法的程序指令。
处理器51用于执行存储器52存储的程序指令以利用Flink处理类型不同的多条数据量流。
其中,处理器51还可以称为CPU(Central Processing Unit,中央处理单元)。处理器51可能是一种集成电路芯片,具有信号的处理能力。处理器51还可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
参阅图6,图6为本发明实施例的存储介质的结构示意图。本发明实施例的存储介质存储有能够实现上述所有方法的程序文件61,其中,该程序文件61可以以软件产品的形式存储在上述存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质,或者是计算机、服务器、手机、平板等终端设备。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。以上仅为本申请的实施方式,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (10)
1.一种多数据流处理方法,其特征在于,包括:
接收消息中间件发送的多条数据流,并获取每条所述数据流的类型;
提取所述多条数据流中类型为插入的第一数据流,利用Flink窗口功能将所述第一数据流插入到预先构建的最终结果表中;
提取所述多条数据流中类型为非插入的第二数据流,构建同步表,并利用Flink窗口功能将所述第二数据流插入到所述同步表中;
合并所述同步表和预先构建的最终结果表,以对所述最终结果表中相应的字段进行更新,得到新的最终结果表。
2.根据权利要求1所述的多数据流处理方法,其特征在于,所述提取所述多条数据流中类型为非插入的第二数据流,构建同步表,并利用Flink窗口功能将所述第二数据流插入到所述同步表中,包括:
提取所述多条数据流中类型为非插入的第二数据流;
从所述第二数据流中提取出第二字段信息,并与所述最终结果表中的字段信息进行比对,以确认所述最终结果表中的待更新的第一字段信息;
构建所述同步表;
利用Flink窗口功能将所述第二字段信息和所述第二字段信息对应的数据存储至所述同步表中。
3.根据权利要求2所述的多数据流处理方法,其特征在于,所述合并所述同步表和预先构建的最终结果表,以对所述最终结果表中相应的字段进行更新,得到新的最终结果表,包括:
利用所述第二字段信息对应的数据更新掉所述最终结果表中所述待更新的第一字段信息的数据,且所述最终结果表中其余字段的数据不变,得到新的最终结果表。
4.根据权利要求2所述的多数据流处理方法,其特征在于,所述提取所述多条数据流中类型为非插入的第二数据流之后,还包括:
判断针对于同一字段信息的所述第二数据流的数量是否超过一条;
若是,则获取针对于所述同一字段信息的所有第二数据流的事件时间;
选取所述事件时间最新的第二数据流作为用于更新所述同一字段信息的最终的第二数据流,并删除其余所述第二数据流。
5.根据权利要求2所述的多数据流处理方法,其特征在于,所述利用Flink窗口功能将所述第二字段信息和所述第二字段信息对应的数据存储至所述同步表中之后,还包括:
当所述数据流的类型为删除时,在所述同步表中为所述第二字段信息和所述第二字段信息对应的数据打上删除标签。
6.根据权利要求1所述的多数据流处理方法,其特征在于,所述得到新的最终结果表之后,还包括:
将所述新的最终结果表存储至存储器中,并删除所述同步表。
7.根据权利要求1所述的多数据流处理方法,其特征在于,所述得到新的最终结果表之后,还包括:
将所述新的最终结果表上传至区块链。
8.一种多数据流处理装置,其特征在于,包括:
获取模块,用于接收消息中间件发送的多条数据流,并获取每条所述数据流的类型;
第一处理模块,用于提取所述多条数据流中类型为插入的第一数据流,利用Flink窗口功能将所述第一数据流插入到预先构建的最终结果表中;
第二处理模块,用于提取所述多条数据流中类型为非插入的第二数据流,构建同步表,并利用Flink窗口功能将所述第二数据流插入到所述同步表中;
合并模块,用于合并所述同步表和预先构建的最终结果表,以对所述最终结果表中相应的字段进行更新,得到新的最终结果表。
9.一种终端,其特征在于,所述终端包括处理器、与所述处理器耦接的存储器,其中,
所述存储器存储有用于实现如权利要求1-7中任一项所述的多数据流处理方法的程序指令;
所述处理器用于执行所述存储器存储的所述程序指令以利用Flink处理类型不同的多条数据量流。
10.一种存储介质,其特征在于,存储有能够实现如权利要求1-7中任一项所述的多数据流处理方法的程序文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011305312.5A CN112347143A (zh) | 2020-11-19 | 2020-11-19 | 多数据流处理方法、装置、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011305312.5A CN112347143A (zh) | 2020-11-19 | 2020-11-19 | 多数据流处理方法、装置、终端及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112347143A true CN112347143A (zh) | 2021-02-09 |
Family
ID=74364434
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011305312.5A Pending CN112347143A (zh) | 2020-11-19 | 2020-11-19 | 多数据流处理方法、装置、终端及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112347143A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113342853A (zh) * | 2021-06-18 | 2021-09-03 | 上海哔哩哔哩科技有限公司 | 流式数据处理方法和系统 |
CN113515547A (zh) * | 2021-07-23 | 2021-10-19 | 北京亿欧网盟科技有限公司 | 多关联实时数据流的乱序处理方法、装置、介质和设备 |
WO2023142627A1 (zh) * | 2022-01-30 | 2023-08-03 | 华为技术有限公司 | 一种多流同步的方法和装置 |
-
2020
- 2020-11-19 CN CN202011305312.5A patent/CN112347143A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113342853A (zh) * | 2021-06-18 | 2021-09-03 | 上海哔哩哔哩科技有限公司 | 流式数据处理方法和系统 |
CN113515547A (zh) * | 2021-07-23 | 2021-10-19 | 北京亿欧网盟科技有限公司 | 多关联实时数据流的乱序处理方法、装置、介质和设备 |
CN113515547B (zh) * | 2021-07-23 | 2023-11-24 | 北京亿欧网盟科技有限公司 | 多关联实时数据流的乱序处理方法、装置、介质和设备 |
WO2023142627A1 (zh) * | 2022-01-30 | 2023-08-03 | 华为技术有限公司 | 一种多流同步的方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112347143A (zh) | 多数据流处理方法、装置、终端及存储介质 | |
CN107315761B (zh) | 一种数据更新方法、数据查询方法及装置 | |
JP7059370B2 (ja) | ブロックチェーン上の大量トランザクション性能を最適化するための方法、装置、コンピュータ・プログラムおよびコンピュータ・プログラムを記録したコンピュータ可読記憶媒体 | |
CN110569311B (zh) | 一种数据库的数据同步方法、设备和计算机存储介质 | |
CN110321387A (zh) | 数据同步方法、设备及终端设备 | |
CN103218176B (zh) | 数据处理方法及装置 | |
CN109558065B (zh) | 数据删除方法及分布式存储系统 | |
CN112162965B (zh) | 一种日志数据处理的方法、装置、计算机设备及存储介质 | |
CN110231995B (zh) | 一种基于Actor模型的任务调度方法、装置及存储介质 | |
CN111427859B (zh) | 一种消息处理方法、装置、电子设备及存储介质 | |
CN112434043B (zh) | 一种数据同步方法、装置、电子设备及介质 | |
CN111552701A (zh) | 确定分布式集群中数据一致性的方法及分布式数据系统 | |
CN114647698A (zh) | 数据同步方法、装置及计算机存储介质 | |
CN112380227A (zh) | 基于消息队列的数据同步方法、装置、设备及存储介质 | |
CN111881209A (zh) | 异构数据库的数据同步方法、装置、电子设备及介质 | |
US11144536B2 (en) | Systems and methods for real-time analytics detection for a transaction utilizing synchronously updated statistical aggregation data | |
CN113420032A (zh) | 一种日志的分类存储方法及装置 | |
CN110069533A (zh) | 一种基于区块链的事件订阅方法及装置 | |
CN111651522B (zh) | 一种数据同步方法及装置 | |
US9652310B1 (en) | Method and apparatus for using consistent-hashing to ensure proper sequencing of message processing in a scale-out environment | |
EP2902909A1 (en) | Distributed storage apparatus, storage node, data provision method and program | |
CN111930890A (zh) | 信息发送方法、装置、终端设备及存储介质 | |
CN114625805B (zh) | 一种回测配置方法、装置、设备及介质 | |
CN115104295A (zh) | 数据处理方法、装置、电子装置及存储介质 | |
CN111078418A (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 |