乱序数据处理方法、装置、设备及可读存储介质与流程

文档序号:22124778发布日期:2020-09-04 17:04阅读:356来源:国知局
乱序数据处理方法、装置、设备及可读存储介质与流程

本发明涉及金融科技(fintech)技术领域,尤其涉及一种乱序数据处理方法、装置、设备及可读存储介质。



背景技术:

随着金融科技(fintech),尤其是互联网科技金融的不断发展,越来越多的技术(如人工智能、大数据、云存储等)应用在金融领域,但金融领域也对各类技术提出了更高的要求,如要求实时计算过程中对大量数据的准确统计等。

当前实时计算的场景中,数据乱序是很常见的问题,乱序数据的处理准确,对数据统计的准确性有重大影响。而flink框架因高效的处理特性而广泛应用于实时计算场景中,其将数据分配到窗口,通过窗口的状态管理来实现数据统计。但是flink框架对于乱序数据,会进行丢弃,如此一来,导致所统计的数据具有不准确性。

因此,如何依赖flink框架对实时计算过程中的乱序数据进行准确统计是当前亟待解决的技术问题。



技术实现要素:

本发明的主要目的在于提供一种乱序数据处理方法、装置、设备及可读存储介质,旨在解决现有技术中如何依赖flink框架对实时计算过程中的乱序数据进行准确统计的技术问题。

为实现上述目的,本发明提供一种乱序数据处理方法,所述乱序数据处理方法包括以下步骤:

基于预设流处理框架从消息队列中读取待处理数据,并判断与所述待处理数据的生成时间匹配的时间窗口是否处于清除状态;

若处于清除状态,则判定所述待处理数据为乱序数据,基于所述预设流处理框架重新形成所述时间窗口,并读取与所述时间窗口对应的历史清除数据,将所述历史清除数据恢复到所述时间窗口;

基于所述预设流处理框架将所述待处理数据分配到所述时间窗口,与恢复到所述时间窗口内的所述历史清除数据进行聚合,完成对乱序数据的处理。

可选地,所述基于所述预设流处理框架将所述待处理数据分配到所述时间窗口,与恢复到所述时间窗口内的所述历史清除数据进行聚合的步骤包括:

基于所述预设流处理框架将所述待处理数据分配到所述时间窗口,并对所述时间窗口添加延时时长;

判断所述延时时长内是否读取到目标待处理数据,其中,所述目标待处理数据的生成时间与所述时间窗口匹配;

若读取到所述目标待处理数据,将所述目标待处理数据分配到所述时间窗口,并在所述延时时长结束后,对所述时间窗口内的各个数据进行聚合。

可选地,所述判断与所述待处理数据的生成时间匹配的时间窗口是否处于清除状态的步骤之后,所述方法还包括:

若与所述待处理数据的生成时间匹配的时间窗口处于未清除状态,则将所述待处理数据分配到所述时间窗口,并判断所述待处理数据的生成时间是否达到所述时间窗口的水位线;

若达到所述时间窗口的水位线,则对所述时间窗口内的各个数据进行聚合处理,生成处理结果存储到预设数据库。

可选地,所述生成处理结果存储到预设数据库的步骤之后,所述方法还包括:

将所述时间窗口内的所有数据传输到所述预设数据库缓存,并在缓存成功后,清除所述时间窗口内的所有数据;

调整所述时间窗口的水位线,以读取所述消息队列中新的待处理数据进行聚合处理。

可选地,所述将所述时间窗口内的所有数据传输到所述预设数据库缓存的步骤之后,所述方法还包括:

当检测到达所述预设数据库的清理时间时,查找所述预设数据库缓存的各项数据中的待删除数据,并对所述待删除数据进行删除操作。

可选地,所述判断与所述待处理数据的生成时间匹配的时间窗口是否处于清除状态的步骤包括:

读取处于激活状态的当前时间窗口的窗口时间区间,并判断所述待处理数据的生成时间是否位于所述窗口时间区间内;

若位于所述窗口时间区间内,则判定与所述待处理数据的生成时间匹配的时间窗口处于未清除状态;

若不位于所述窗口时间区间内,则判定与所述待处理数据的生成时间匹配的时间窗口处于清除状态。

可选地,所述基于预设流处理框架从消息队列中读取待处理数据的步骤包括:

基于预设流处理框架从消息队列中读取单条数据,并调用预设函数从所述单条数据中提取出与预设字段对应的数据;

将与预设字段对应的数据确定为所述待处理数据。

进一步地,为实现上述目的,本发明还提供一种乱序数据处理装置,所述乱序数据处理装置包括:

判断模块,用于基于预设流处理框架从消息队列中读取待处理数据,并判断与所述待处理数据的生成时间匹配的时间窗口是否处于清除状态;

恢复模块,用于若处于清除状态,则判定所述待处理数据为乱序数据,基于所述预设流处理框架重新形成所述时间窗口,并读取与所述时间窗口对应的历史清除数据,将所述历史清除数据恢复到所述时间窗口;

聚合模块,用于基于所述预设流处理框架将所述待处理数据分配到所述时间窗口,与恢复到所述时间窗口内的所述历史清除数据进行聚合,完成对乱序数据的处理。

进一步地,为实现上述目的,本发明还提供一种乱序数据处理设备,所述乱序数据处理设备包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的乱序数据处理程序,所述乱序数据处理程序被所述处理器执行时实现如上述所述的乱序数据处理方法的步骤。

进一步地,为实现上述目的,本发明还提供一种可读存储介质,所述可读存储介质上存储有乱序数据处理程序,所述乱序数据处理程序被处理器执行时实现如上所述的乱序数据处理方法的步骤。

本发明的乱序数据处理方法、装置、设备及可读存储介质,先基于预设流处理框架从消息队列中读取出待处理数据,并判断与该待处理数据生成时间匹配的时间窗口是否处于清除状态;若经判定处于清除状态,则说明待处理数据为乱序数据,基于预设流处理框架重新形成时间窗口,并读取与时间窗口对应的历史清除数据,将历史清除数据恢复到时间窗口;进而基于预设流处理框架将待处理数据分配到时间窗口,与恢复到时间窗口内的历史清除数据一并聚合,完成乱序数据的处理。本发明在由时间窗口的清除状态判定出待处理数据为乱序数据后,重新形成时间窗口,并读取经处理后从时间窗口清除的历史清除数据再次恢复到时间窗口,进而将待处理数据分配到时间窗口,与恢复的历史清除数据进行聚合,避免对乱序数据的丢弃而导致数据统计的不准确性,确保了实时计算过程中数据的全面准确统计。

附图说明

图1为本发明乱序数据处理设备实施例方案涉及的设备硬件运行环境的结构示意图;

图2为本发明乱序数据处理方法第一实施例的流程示意图;

图3为本发明乱序数据处理装置较佳实施例的功能模块示意图;

图4为本发明乱序数据处理方法一具体实施例中基于flink框架对乱序数据处理的流程示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本发明提供一种乱序数据处理设备,参照图1,图1为本发明乱序数据处理设备实施例方案涉及的设备硬件运行环境的结构示意图。

如图1所示,该乱序数据处理设备可以包括:处理器1001,例如cpu,通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。存储器1005可以是高速ram存储器,也可以是稳定的存储器(non-volatilememory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储设备。

本领域技术人员可以理解,图1中示出的乱序数据处理设备的硬件结构并不构成对乱序数据处理设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图1所示,作为一种可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及乱序数据处理程序。其中,操作系统是管理和控制乱序数据处理设备与软件资源的程序,支持网络通信模块、用户接口模块、乱序数据处理程序以及其他程序或软件的运行;网络通信模块用于管理和控制网络接口1004;用户接口模块用于管理和控制用户接口1003。

在图1所示的乱序数据处理设备硬件结构中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端(用户端),与客户端进行数据通信;处理器1001可以调用存储器1005中存储的乱序数据处理程序,并执行以下操作:

基于预设流处理框架从消息队列中读取待处理数据,并判断与所述待处理数据的生成时间匹配的时间窗口是否处于清除状态;

若处于清除状态,则判定所述待处理数据为乱序数据,基于所述预设流处理框架重新形成所述时间窗口,并读取与所述时间窗口对应的历史清除数据,将所述历史清除数据恢复到所述时间窗口;

基于所述预设流处理框架将所述待处理数据分配到所述时间窗口,与恢复到所述时间窗口内的所述历史清除数据进行聚合,完成对乱序数据的处理。

进一步地,所述基于所述预设流处理框架将所述待处理数据分配到所述时间窗口,与恢复到所述时间窗口内的所述历史清除数据进行聚合的步骤包括:

基于所述预设流处理框架将所述待处理数据分配到所述时间窗口,并对所述时间窗口添加延时时长;

判断所述延时时长内是否读取到目标待处理数据,其中,所述目标待处理数据的生成时间与所述时间窗口匹配;

若读取到所述目标待处理数据,将所述目标待处理数据分配到所述时间窗口,并在所述延时时长结束后,对所述时间窗口内的各个数据进行聚合。

进一步地,所述判断与所述待处理数据的生成时间匹配的时间窗口是否处于清除状态的步骤之后,处理器1001可以调用存储器1005中存储的乱序数据处理程序,并执行以下操作:

若与所述待处理数据的生成时间匹配的时间窗口处于未清除状态,则将所述待处理数据分配到所述时间窗口,并判断所述待处理数据的生成时间是否达到所述时间窗口的水位线;

若达到所述时间窗口的水位线,则对所述时间窗口内的各个数据进行聚合处理,生成处理结果存储到预设数据库。

进一步地,所述生成处理结果存储到预设数据库的步骤之后,处理器1001可以调用存储器1005中存储的乱序数据处理程序,并执行以下操作:

将所述时间窗口内的所有数据传输到所述预设数据库缓存,并在缓存成功后,清除所述时间窗口内的所有数据;

调整所述时间窗口的水位线,以读取所述消息队列中新的待处理数据进行聚合处理。

进一步地,所述将所述时间窗口内的所有数据传输到所述预设数据库缓存的步骤之后,处理器1001可以调用存储器1005中存储的乱序数据处理程序,并执行以下操作:

当检测到达所述预设数据库的清理时间时,查找所述预设数据库缓存的各项数据中的待删除数据,并对所述待删除数据进行删除操作。

进一步地,所述判断与所述待处理数据的生成时间匹配的时间窗口是否处于清除状态的步骤包括:

读取处于激活状态的当前时间窗口的窗口时间区间,并判断所述待处理数据的生成时间是否位于所述窗口时间区间内;

若位于所述窗口时间区间内,则判定与所述待处理数据的生成时间匹配的时间窗口处于未清除状态;

若不位于所述窗口时间区间内,则判定与所述待处理数据的生成时间匹配的时间窗口处于清除状态。

进一步地,所述基于预设流处理框架从消息队列中读取待处理数据的步骤包括:

基于预设流处理框架从消息队列中读取单条数据,并调用预设函数从所述单条数据中提取出与预设字段对应的数据;

将与预设字段对应的数据确定为所述待处理数据。

本发明乱序数据处理设备的具体实施方式与下述乱序数据处理方法各实施例基本相同,在此不再赘述。

本发明还提供一种乱序数据处理方法。

参照图2,图2为本发明乱序数据处理方法第一实施例的流程示意图。

本发明实施例提供了乱序数据处理方法的实施例,需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。具体地,本实施例中的乱序数据处理方法包括:

步骤s10,基于预设流处理框架从消息队列中读取待处理数据,并判断与所述待处理数据的生成时间匹配的时间窗口是否处于清除状态;

本实施例中乱序数据处理方法应用于包含有预设流处理框架的系统,预设流处理框架优选为flink框架,flink是一种流批结合的流处理框架,广泛应用于实时计算中的数据统计。本系统除了设置有flink框架之外,还设置有消息队列,系统生成的数据先存放在消息队列中,由flink框架从消息队列中读取并处理。其中,消息队列可以是activemq、rabbitmq、rocketmq、kafka中的任意一项,考虑到大数据的实时采集计算,优选为kafka形式的消息队列。并且,实时采集计算的数据主要为业务数据或者日志数据等。

进一步地,系统所生成的每条数据以特定的数据格式存放在消息队列中,每条数据包含多个数据项,表征每条数据所针对的事项、事项的时间等。本实施例中每条数据的多个数据项均以key_value键值对的形式存在,表征事项在各个因素上的参数值,如对某条广告业务的进行点击的事项,点击次数、点击时间、广告产品价格及各自的参数值即可形成多个key_value键值对,表征在点击次数、点击时间和广告产品价格等因素上的数值。若点击次数为1、点击时间为2020-05-2412:57.00,广告产品价格为9.0,则所形成的数据为:{“price”:9.0,“click”:1,“timestamp”:2020-05-2412:57.00}。系统将以此形成的各条数据依据各自的形成时间存放在消息队列中,由flink框架逐条读取进行处理。

可理解地,虽然消息队列所存放的每条数据均以同样的数据格式包含多种数据项,但是在flink框架处理过程中,所需求的数据项具有特定性,即针对特定的数据项进行处理。如上述广告业务,处理的数据项可能为对各项价格统计后计算平均价格,也可能是对点击次数进行统计得到总点击次数。针对不同的处理需求,将所需求数据项中的key作为预设字段,如针对上述数据的处理需求为点击次数,则将“click”作为预设字段。flink框架在从消息队列中读取到每条数据后,继续提取与预设字段对应的数据作为待处理数据进行处理。具体地,基于flink框架从消息队列中读取待处理数据的步骤包括:

步骤s11,基于预设流处理框架从消息队列中读取单条数据,并调用预设函数从所述单条数据中提取出与预设字段对应的数据;

步骤s12,将与预设字段对应的数据确定为所述待处理数据。

进一步地,预先设置有对与预设字段对应数据进行提取的预设函数,如map函数。在通过flink框架从消息队列中逐一读取每条数据,作为单条数据后,调用预设函数对每次读取的单条数据进行提取,从其中提取出与预设字段对应的数据。并且,将提取的数据确定为待处理数据,以便通过flink进行处理。

更进一步地,flink框架中对于数据的处理方式为设定一定时间间隔的时间窗口,并且时间窗口随着当前时间的变化而变化。如时间间隔为5分钟,以12点点为起点,则将12点之前5分钟形成时间窗口,即11:55到12:00之间。若当前时间超过12:00,则时间窗口变化为12:00到12:05分之间。当消息队列中数据的生成时间在时间间隔所形成的当前时间窗口内,则将该数据分配到该时间窗口内,在将生成时间位于当前时间窗口内的所有数据均分配到时间窗口后,则会对时间窗口内的所有数据进行处理,将其中的数据一并进行聚合,进行统计或者平均值计算。此后,改变时间窗口的时间区间,读取消息队列中的其他数据继续处理。

但是对于乱序数据来说,其在消息队列中没有依据生成时间进行排列,使得flink框架按照顺序从消息队列中读取各条数据时,所得到数据的生成时间已经不在当前处理的时间窗口的时间区间内,并且此前处理的数据也因缺少该条数据而不准确。因此,本实施例flink在依据预设函数提取到待处理数据后,对与该待处理数据的生成时间匹配的时间窗口是否处于清除状态进行判断,其中待处理数据的生成时间所在的时间窗口即为匹配的时间窗口。并且每个时间窗口在对其中的待处理数据处理完成后,会将待处理数据进行清除,并更新时间区间,以对位于更新的时间区间内的待处理数据进行处理。将清除待处理数据后时间窗口的状态作为清除状态,并可通过确定待处理数据的生成时间是否位于当前工作的时间窗口的时间区间内,来判断匹配的时间窗口是否处于清除状态。

步骤s20,若处于清除状态,则判定所述待处理数据为乱序数据,基于所述预设流处理框架重新形成所述时间窗口,并读取与所述时间窗口对应的历史清除数据,将所述历史清除数据恢复到所述时间窗口;

进一步地,若经判定与待处理数据的生成时间匹配的时间窗口处于清除状态,则说明该待处理数据为乱序数据,flink框架对所匹配时间窗口内的各项待处理数据已经处理完成。并且经处理的各项待处理数据被转移至特定的存储单元存储,该特定的存储单元可以是系统对接的数据库,如redis数据库,也可以是系统的内存,为了存储的稳定性优选为外接的redis数据库。

更进一步地,在确定待处理数据为乱序数据后,为了确保处理结果的准确性,通过flink框架对与匹配的时间窗口对应的历史清除数据进行读取,历史清除数据即为经处理的各项待处理数据。通过从外接的redis数据库中读取出该时间窗口的各项待处理数据即可得到与时间窗口对应的历史清除数据。读取的历史清除数据重新进入系统内存,并重新形成时间窗口,进而将系统内存中的历史清除数据恢复到该时间窗口内,以便于flink再次处理,确保处理结果的准确性。

步骤s30,基于所述预设流处理框架将所述待处理数据分配到所述时间窗口,与恢复到所述时间窗口内的所述历史清除数据进行聚合,完成对乱序数据的处理。

进一步地,flink框架将从消息队列中读取的待处理数据分配到其匹配的时间窗口内,与恢复到时间窗口内的各项历史清除数据进行聚合,完成对乱序数据的处理,确保时间窗口内各项数据处理的准确性。具体地,基于flink框架将待处理数据分配到时间窗口,与恢复到时间窗口内的历史清除数据进行聚合的步骤包括:

步骤s31,基于所述预设流处理框架将所述待处理数据分配到所述时间窗口,并对所述时间窗口添加延时时长;

步骤s32,判断所述延时时长内是否读取到目标待处理数据,其中,所述目标待处理数据的生成时间与所述时间窗口匹配;

步骤s33,若读取到所述目标待处理数据,将所述目标待处理数据分配到所述时间窗口,并在所述延时时长结束后,对所述时间窗口内的各个数据进行聚合。

可理解地,对于时间窗口内的数据,可能乱序数据不止一条,为了避免频繁重新形成时间窗口和恢复历史清除数据,在对乱序数据进行处理的过程中设置有延时机制。具体地,预先设置延时时长,如延时10分钟或者20分钟等。在将历史清除数据恢复至时间窗口,并将待测互利数据分配至时间窗口后,对时间窗口添加该延时时长,以便时间窗口等待该延时时长才对其中的数据进行处理。在等待的延时时长内,判断是否再次读取到生成时间与时间窗口匹配的数据,该数据的生成时间位于重新形成的时间窗口内,属于另外的乱序数据,将其作为目标待处理数据。

进一步地,若读取到数据的生成时间位于时间窗口的时间区间内,则判定读取到目标待处理数据,并且将该目标待处理数据分配到时间窗口。在延时时长结束后,将分配到时间窗口内的目标待处理数据和此前的待处理数据,以及历史清除数据等各项数据作为时间窗口内的所有数据一并聚合。若在延时时长内,读取的数据的生成时间均不位于时间窗口的时间区间内,即未读取到目标待处理数据,则在延时时长结束后,将此前分配到时间窗口内的待处理数据和历史清除数据等各项数据作为时间窗口内的所有数据一并聚合。通过设定延时时长来确保尽量将所有的乱序数据添加到时间窗口,确保处理结果的准确性。

需要说明的是,聚合与等待延时时长的顺序可以互换,即在将待处理数据分配到时间窗口后,即对时间窗口内的待处理数据和历史清除数据进行聚合,此后再等待延时时长,判断延时时长内是否再次读取到生成时间与时间窗口匹配的数据,即目标待处理数据,若读取到则对时间窗口内包含的所有数据重新聚合,直到延时时长结束。

在一具体实施例中,基于flink框架对乱序数据处理的过程如图4所示,在图4中,将flink框架从kafka消息队列中读取的数据,作为flink框架接收的数据,并通过预设函数从数据中提取出与预设字段对应的数据,实现数据预处理。此后对该数据分配窗口,分配的过程中判断flink框架对应的系统内存中是否有窗口数据,即与该数据生成时间匹配的时间窗口是否处于非清除状态。若经判断处于非清除状态,即内存中具有窗口数据,则将接收的数据分配到该时间窗口进行正常聚合。反之若经判断处于清除状态,内存中不具有窗口数据,则从redis中读取窗口数据,即读取历史清除数据进行恢复,进而对恢复的数据进行正常聚合。在窗口超过水位线进行聚合完成后,把窗口数据,即经聚合的数据写入到redis进行缓存,并清除窗口中完成聚合状态的数据,以便于后续水位线的聚合。

本发明的乱序数据处理方法,先基于预设流处理框架从消息队列中读取出待处理数据,并判断与该待处理数据生成时间匹配的时间窗口是否处于清除状态;若经判定处于清除状态,则说明待处理数据为乱序数据,基于预设流处理框架重新形成时间窗口,并读取与时间窗口对应的历史清除数据,将历史清除数据恢复到时间窗口;进而基于预设流处理框架将待处理数据分配到时间窗口,与恢复到时间窗口内的历史清除数据一并聚合,完成乱序数据的处理。本发明在由时间窗口的清除状态判定出待处理数据为乱序数据后,重新形成时间窗口,并读取经处理后从时间窗口清除的历史清除数据再次恢复到时间窗口,进而将待处理数据分配到时间窗口,与恢复的历史清除数据进行聚合,避免对乱序数据的丢弃而导致数据统计的不准确性,确保了实时计算过程中数据的全面准确统计。

进一步地,基于本发明乱序数据处理方法的第一实施例,提出本发明乱序数据处理方法第二实施例。

所述乱序数据处理方法第二实施例与所述乱序数据处理方法第一实施例的区别在于,所述判断与所述待处理数据的生成时间匹配的时间窗口是否处于清除状态的步骤之后,还包括:

步骤s40,若与所述待处理数据的生成时间匹配的时间窗口处于未清除状态,则将所述待处理数据分配到所述时间窗口,并判断所述待处理数据的生成时间是否达到所述时间窗口的水位线;

步骤s50,若达到所述时间窗口的水位线,则对所述时间窗口内的各个数据进行聚合处理,生成处理结果存储到预设数据库。

本实施例在与待处理数据的生成时间匹配的时间窗口处于为清除状态的情形下,对待处理数据进行聚合。具体地,若经确定待处理数据的生成时间位于当前工作的时间窗口的时间区间内,则判定匹配的时间窗口处于未清除状态,当前工作的时间窗口即是匹配的时间窗口。此时,将待处理数据直接分配到当前工作的时间窗口中,并且判断待处理数据的生成时间是否达到时间窗口的水位线。其中时间窗口的水位线表征时间窗口所对应时间区间的上边界值,如时间窗口为11:55到12:00,则水位线为12:00。将待处理数据的生成时间和时间区间的上边界值对比,通过判断生成时间是否达到上边界值,来确定是否达到时间窗口的水位线。若生成时间达到水位线,则说明消息队列中在水位线之前生成的数据均分配到时间窗口中,从而对时间窗口中的所有数据进行聚合处理,依据处理需求生成为平均值或者统计总数量,并将生成的平均值或者统计的总数量作为处理结果存储到预设数据库。若生成时间未达到水位线,则继续从消息队列中读取待处理数据进行判断,直到读取到某一待处理数据的生成时间达到水位线,对时间窗口中的所有数据进行聚合,处理生成处理结果存储到预设数据库。其中,预设数据库为预先设置与系统对接的数据库,如redis数据库,以便于后续从预设数据库中读取处理结构继续处理或者分析展示。

进一步地,所述生成处理结果存储到预设数据库的步骤之后,还包括:

步骤s60,将所述时间窗口内的所有数据传输到所述预设数据库缓存,并在缓存成功后,清除所述时间窗口内的所有数据;

为了避免经处理的时间窗口中存在乱序数据,而导致处理结果不准确,在对时间窗口内的所有数据进行聚合处理,生成处理结果存储到预设数据库后,还将时间窗口内的所有数据传输到预设数据库缓存,以在读取到与时间窗口匹配的乱序数据后,获取该缓存的数据恢复到时间窗口内重新处理,确保处理结果的准确性。并且,在缓存的过程中,若接收到预设数据库反馈的缓存成功标识,表征缓存成功后,对时间窗口内的所有数据清除,以更新时间窗口的时间区间,读取消息队列中的其他数据进行处理。

更进一步地,所述将所述时间窗口内的所有数据传输到所述预设数据库缓存的步骤之后,还包括:

步骤s61,当检测到达所述预设数据库的清理时间时,查找所述预设数据库缓存的各项数据中的待删除数据,并对所述待删除数据进行删除操作。

可理解地,预设数据库的存储量有限,为了对各个时间窗口内各项数据的有效缓存,针对缓存的各项数据设定有定时清理机制。如设定针对每个时间窗口存储的数据定时2天清理,将该设定的时间作为预设数据库的清理时间,当检测到达该清理时间时,查找预设数据库中存储时间达到该定时清理时间的数据,并将该类数据作为待删除数据进行删除操作,以释放预设数据库的内存,便于对后续所产生数据的存储。

步骤s70,调整所述时间窗口的水位线,以读取所述消息队列中新的待处理数据进行聚合处理。

进一步地,在缓存成功,并清除时间窗口内的所有数据后,根据时间间隔对时间窗口的水位线进行调整;将时间窗口对应时间区间的上边界值增加时间间隔的数值,并且为了保证时间间隔的不变,还对时间区间的下边界值增加时间间隔的数值,以此形成新的时间窗口。如时间窗口为16:00到16:10,时间间隔为10分钟,则调整后的时间窗口为16:10到16:20。通过时间窗口水位线调整所形成新的时间窗口,来从消息队列中读取与新的时间窗口对应的各条待处理数据进行聚合处理。

本实施例在对生成时间与时间窗口匹配的待处理数据处理完成后,将时间窗口内的所有数据传输到预设数据库缓存,在时间窗口中存在乱序数据的情况下,可将时间窗口内的所有数据从预设数据库恢复进行再次处理,以确保处理结果的准确性。并且针对预设数据库设定定时清理机制,确保了数据的有效缓存。

进一步地,基于本发明乱序数据处理方法的第一或第二实施例,提出本发明乱序数据处理方法第三实施例。

所述乱序数据处理方法第三实施例与所述乱序数据处理方法第一或第二实施例的区别在于,所述判断与所述待处理数据的生成时间匹配的时间窗口是否处于清除状态的步骤包括:

步骤s13,读取处于激活状态的当前时间窗口的窗口时间区间,并判断所述待处理数据的生成时间是否位于所述窗口时间区间内;

步骤s14,若位于所述窗口时间区间内,则判定与所述待处理数据的生成时间匹配的时间窗口处于未清除状态;

步骤s15,若不位于所述窗口时间区间内,则判定与所述待处理数据的生成时间匹配的时间窗口处于清除状态。

本实施例通过待处理数据的生成时间是否位于当前工作的时间窗口的时间区间内,来判断匹配的时间窗口是否处于清除状态。具体地,读取flink框架中当前处于激活状态的当前时间窗口的窗口时间区间,并将待处理数据的生成时间和窗口时间区间对比,判断待处理数据的生成时间是否位于窗口时间区间内。若位于窗口时间区间内,则说明当前工作的时间窗口即为与待处理数据生成时间匹配的时间窗口,从而判定与待处理数据的生成时间匹配的时间窗口处于未清除状态。当前时间窗口即为对待处理数据进行聚合处理的时间窗口,可直接将待处理数据分配到当前时间窗口内,和分配到当前时间窗口内的其他数据一并聚合处理。

进一步地,若经对比确定待处理数据的生成时间不位于窗口时间区间内,则说明与待处理数据的生成时间匹配的时间窗口中的数据已被清除,处于清除状态,需要重新形成时间窗口,并从预设数据库中读取已清除数据恢复到时间窗口中重新进行聚合处理。

需要说明的是,在判断与待处理数据的生成时间匹配的时间窗口是否处于清除状态的过程中,当前工作的时间窗口可能有多个,其中之一为依据时间间隔更新对消息队列中数据进行正常处理的时间窗口,其他的则是因与待处理数据的生成时间匹配的时间窗口处于清除状态,而重新形成的时间窗口。在多个时间窗口的情形下,待处理数据的生成时间位于任意一个时间窗口的时间区间内,则认定与待处理数据的生成时间匹配的时间窗口处于未清除状态,可通过生成时间所在的时间窗口对该待处理数据进行聚合处理,避免重复恢复处理。

本实施例通过待处理数据的生成时间是否位于当前工作的时间窗口的时间区间内,来判断匹配的时间窗口是否处于清除状态,判断的方式简便快捷,可快速确定出匹配的时间窗口是否处于清除状态。

本发明还提供一种乱序数据处理装置。

参照图3,图3为本发明乱序数据处理装置第一实施例的功能模块示意图。

所述乱序数据处理装置包括:

判断模块10,用于基于预设流处理框架从消息队列中读取待处理数据,并判断与所述待处理数据的生成时间匹配的时间窗口是否处于清除状态;

恢复模块20,用于若处于清除状态,则判定所述待处理数据为乱序数据,基于所述预设流处理框架重新形成所述时间窗口,并读取与所述时间窗口对应的历史清除数据,将所述历史清除数据恢复到所述时间窗口;

聚合模块30,用于基于所述预设流处理框架将所述待处理数据分配到所述时间窗口,与恢复到所述时间窗口内的所述历史清除数据进行聚合,完成对乱序数据的处理。

进一步地,所述聚合模块30还包括:

分配单元,用于基于所述预设流处理框架将所述待处理数据分配到所述时间窗口,并对所述时间窗口添加延时时长;

判断单元,用于判断所述延时时长内是否读取到目标待处理数据,其中,所述目标待处理数据的生成时间与所述时间窗口匹配;

聚合单元,用于若读取到所述目标待处理数据,将所述目标待处理数据分配到所述时间窗口,并在所述延时时长结束后,对所述时间窗口内的各个数据进行聚合。

进一步地,所述乱序数据处理装置还包括:

分配模块,用于若与所述待处理数据的生成时间匹配的时间窗口处于未清除状态,则将所述待处理数据分配到所述时间窗口,并判断所述待处理数据的生成时间是否达到所述时间窗口的水位线;

生成模块,用于若达到所述时间窗口的水位线,则对所述时间窗口内的各个数据进行聚合处理,生成处理结果存储到预设数据库。

进一步地,所述乱序数据处理装置还包括:

清除模块,用于将所述时间窗口内的所有数据传输到所述预设数据库缓存,并在缓存成功后,清除所述时间窗口内的所有数据;

调整模块,用于调整所述时间窗口的水位线,以读取所述消息队列中新的待处理数据进行聚合处理。

进一步地,所述清除模块还用于:

当检测到达所述预设数据库的清理时间时,查找所述预设数据库缓存的各项数据中的待删除数据,并对所述待删除数据进行删除操作。

进一步地,所述判断模块10还包括:

读取单元,用于读取处于激活状态的当前时间窗口的窗口时间区间,并判断所述待处理数据的生成时间是否位于所述窗口时间区间内;

第一判定单元,用于若位于所述窗口时间区间内,则判定与所述待处理数据的生成时间匹配的时间窗口处于未清除状态;

第二判定单元,用于若不位于所述窗口时间区间内,则判定与所述待处理数据的生成时间匹配的时间窗口处于清除状态。

进一步地,所述判断模块10还包括:

调用单元,用于基于预设流处理框架从消息队列中读取单条数据,并调用预设函数从所述单条数据中提取出与预设字段对应的数据;

确定单元,用于将与预设字段对应的数据确定为所述待处理数据。

本发明乱序数据处理装置具体实施方式与上述乱序数据处理方法各实施例基本相同,在此不再赘述。

此外,本发明实施例还提出一种可读存储介质。

可读存储介质上存储有乱序数据处理程序,乱序数据处理程序被处理器执行时实现如上所述的乱序数据处理方法的步骤。

本发明可读存储介质可以是计算机可读存储介质,其具体实施方式与上述乱序数据处理方法各实施例基本相同,在此不再赘述。

上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,这些均属于本发明的保护之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1