流计算方法、流计算装置、流计算系统及介质与流程

文档序号:20617111发布日期:2020-05-06 20:17阅读:140来源:国知局
流计算方法、流计算装置、流计算系统及介质与流程

本发明涉及数据处理领域,尤其涉及流计算方法、流计算装置、流计算系统及计算机可读存储介质。



背景技术:

在传统的数据处理流程中,总是先收集数据,然后将数据放到数据库中。当人们需要得到答案或进行相关的处理时,可以通过数据库对数据做查询操作。这样看起来虽然非常合理,但是结果却非常的紧凑,尤其是在面对一些实时搜索应用环境中的某些具体问题时,并不能很好地解决问题。这就引出了一种新的数据计算结构——流计算方式。在流计算过程中,为提高数据处理的准确性,需要使每条输入消息只影响最终结果一次,即使出现机器故障或软件崩溃,也要保证不会有数据被重复处理。

传统的流计算过程中,只能基于flink(弗林克,一种开源流处理框架)实现仅一次处理。但flink框架较为复杂,无法解决简单独立的java或c++程序的仅一次处理,而且必须使用特点的下游组件,无法支持数据库等其它下游组件。这样存在流计算的兼容性较差的缺点。



技术实现要素:

本发明的主要目的在于提供一种流计算方法、流计算装置、流计算系统及计算机可读存储介质,旨在达成提升流计算的兼容性的效果。

为实现上述目的,本发明提供一种流计算方法,所述流计算方法包括以下步骤:

流计算系统读取源端数据;

将所述源端数据写入目标端,以在所述目标端中生产带编号的消息,其中,所述编号与所述消息一一对应,且所述编号单调递增;

应用端对所述编号进行去重,并根据去重后的所述编号在所述目标端中读取所述编号对应的所述消息。

可选地,所述将所述源端数据写入目标端,以在所述目标端中生产带编号的消息的步骤之后,还包括:

判断所述源端数据是否写入失败;

在所述源端数据写入失败时,执行所述将所述源端数据写入目标端的步骤。

可选地,所述应用端根据所述编号在所述目标端中读取所述编号对应的所述消息的步骤包括:

获取当前读取动作对应的第一编号和前一次读取动作对应的第二编号;

在所述第一编号大于所述第二编号时,读取所述第一编号对应的消息。

可选地,所述获取当前读取动作对应的第一编号和前一次读取动作对应的第二编号的步骤之后,还包括:

在所述第一编号小于或等于所述第二编号时,忽略所述第一编号,并执行下一次读取动作。

可选地,所述流计算方法还包括:

所述流计算系统异常重启后,读取所述目标端中最后一条所述消息对应的所述编号;

根据所述编号确定读取源端数据时的起始点,并基于所述启示点执行所述流计算系统读取源端数据的步骤。

可选地,所述应用端对所述编号进行去重,并根据去重后的所述编号在所述目标端中读取所述编号对应的所述消息的步骤之后,还包括:

获取每一所述消息的业务时间戳及/或业务字段;

根据所述业务时间戳及/或所述业务字段对所述消息进行排序;

所述应用端根据所述排序顺序对所述消息进行处理。

此外,为实现上述目的,本发明还提供一种流计算装置,所述流计算装置包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的流计算装置的控制程序,所述流计算装置的控制程序被所述处理器执行时实现如上所述的流计算方法的步骤。

此外,为实现上述目的,本发明还提供一种流计算系统,所述流计算系统包括数据源端,目标端和应用端,所述流计算系统设置为将数据源端的源端数据读取并写入所述目标端的消息列队,以使应用端根据消息编号在所述消息列队中读取消息。

此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有流计算装置的控制程序,所述流计算装置的控制程序被处理器执行时实现如上所述的流计算方法的步骤。

本发明实施例提出的一种流计算方法、流计算装置及计算机可读存储介质,流计算系统先读取源端数据,然后将所述源端数据写入目标端,以在所述目标端中生产带编号的消息,其中,所述编号与所述消息一一对应,且所述编号单调递增,并应用端根据所述编号在所述目标端中读取所述编号对应的所述消息,由于所述编号与消息一一对应且单调递增,因此可以根据所述标号进行下游去重,以避免同一输入对输出造成多次影响,同时,由于流计算系统根据消息编号实现仅一次处理,从而达成提升流计算的兼容性的效果。

附图说明

图1是本发明实施例方案涉及的硬件运行环境的终端结构示意图;

图2为本发明流计算方法一实施例的流程示意图;

图3为本发明另一实施例的流程示意图。

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

具体实施方式

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

在传统的数据处理流程中,总是先收集数据,然后将数据放到数据库中。当人们需要得到答案或进行相关的处理时,可以通过数据库对数据做查询操作。这样看起来虽然非常合理,但是结果却非常的紧凑,尤其是在面对一些实时搜索应用环境中的某些具体问题时,并不能很好地解决问题。这就引出了一种新的数据计算结构——流计算方式。在流计算过程中,为提高数据处理的准确性,需要使每条输入消息只影响最终结果一次,即使出现机器故障或软件崩溃,也要保证不会有数据被重复处理。

传统的流计算过程中,只能基于flink(弗林克,一种开源流处理框架)实现仅一次处理。但flink框架较为复杂,无法解决简单独立的java或c++程序的仅一次处理,而且必须使用特点的下游组件,无法支持数据库等其它下游组件。这样存在流计算的兼容性较差的缺点。

为解决上述缺陷,本发明实施例主要提供一种流计算方法,其主要解决方案为:

流计算系统读取源端数据;

将所述源端数据写入目标端,以在所述目标端中生产带编号的消息,其中,所述编号与所述消息一一对应,且所述编号单调递增;

应用端对所述编号进行去重,并根据去重后的所述编号在所述目标端中读取所述编号对应的所述消息。

由于所述编号与消息一一对应且单调递增,因此可以根据所述标号进行下游去重,以避免同一输入对输出造成多次影响,同时,由于流计算系统根据消息编号实现仅一次处理,从而达成提升流计算的兼容性的效果。

如图1所示,图1是本发明实施例方案涉及的硬件运行环境的终端结构示意图。

本发明实施例终端可以是计算机或者服务器等终端设备。

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

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

如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及流计算装置的控制程序。

在图1所示的终端中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;处理器1001可以用于调用存储器1005中存储的流计算装置的控制程序,并执行以下操作:

流计算系统读取源端数据;

将所述源端数据写入目标端,以在所述目标端中生产带编号的消息,其中,所述编号与所述消息一一对应,且所述编号单调递增;

应用端对所述编号进行去重,并根据去重后的所述编号在所述目标端中读取所述编号对应的所述消息。

进一步地,处理器1001可以调用存储器1005中存储的流计算装置的控制程序,还执行以下操作:

判断所述源端数据是否写入失败;

在所述源端数据写入失败时,执行所述将所述源端数据写入目标端的步骤。

进一步地,处理器1001可以调用存储器1005中存储的流计算装置的控制程序,还执行以下操作:

获取当前读取动作对应的第一编号和前一次读取动作对应的第二编号;

在所述第一编号大于所述第二编号时,读取所述第一编号对应的消息。

进一步地,处理器1001可以调用存储器1005中存储的流计算装置的控制程序,还执行以下操作:

在所述第一编号小于或等于所述第二编号时,忽略所述第一编号,并执行下一次读取动作。

进一步地,处理器1001可以调用存储器1005中存储的流计算装置的控制程序,还执行以下操作:

所述流计算系统异常重启后,读取所述目标端中最后一条所述消息对应的所述编号;

根据所述编号确定读取源端数据时的起始点,并基于所述启示点执行所述流计算系统读取源端数据的步骤。

进一步地,处理器1001可以调用存储器1005中存储的流计算装置的控制程序,还执行以下操作:

获取每一所述消息的业务时间戳及/或业务字段;

根据所述业务时间戳及/或所述业务字段对所述消息进行排序;

所述应用端根据所述排序顺序对所述消息进行处理。

参照图2,在本发明流计算方法的一实施例中,所述流计算方法包括以下步骤:

步骤s10、流计算系统读取源端数据;

步骤s20、将所述源端数据写入目标端,以在所述目标端中生产带编号的消息,其中,所述编号与所述消息一一对应,且所述编号单调递增;

步骤s30、应用端根据所述编号在所述目标端中读取所述编号对应的所述消息。

所述流计算方法的执行主体为流计算系统,其中,所述流计算系统可以是基于卡夫卡(kafka,一种开源流处理平台)框架或其他流计算框架的流计算系统。本发明对所述流计算系统的流计算框架不作限定。

在本实施例中,以基于kafka流计算框架的流计算系统作为执行主体进行解释说明。

流计算系统可以读取源端端数据,然后将所述源端数据hash(散列)到不同的partition(有序的数据存储队列)中,即把任意长度的输入(做预映射),通过散列算法,变换成固定长度的消息。

具体地,当读取到源端数据时,可以将读取到的源端数据通过hash算法压缩为消息摘要,然后将所述消息摘要保存至kafka的partition中。并在写入过程中,为避免重复写入数据,但批次写入数据,即每一时刻只执行一批数据的写入操作。

进一步地,当数据写入成功时,流计算系统可以读取下一批数据,并对所述下一批数据执行写入操作。当数据写入失败或者数据写入超时的时候,可以对当前写入失败的数据再次执行写入操作,从而达到流计算系统的上游去重的目地。

需要说明的是,由于数据会被hash到不同的partition,这些partition位于不同的集群节点上,所以每个消息都会被记录一个消息号,其中,所述消息好随着消息的增加逐渐增加,即所述消息好与所述消息是一一对应,且单调递增的。也就是说,每个消息会有一个编号(即消息好)。应用端可以通过所述编号去查询和读取所述消息。

可选地,由于上游程序出现写入超时的时候,并不一定意味着数据写入失败,因此消息列队中的数据坑出现重复编号。为实现仅一次处理,需要避免同一消息出现多次响应的现象。因此可以在应用端读取目标端中的消息是,根据所述编号进行下游去重。

具体地,当应用端可以根据所述编号读取所述应用端中的消息。当应用端获取到消息编号序列时,可以根据所述消息编号序列中对应的编号依次获取目标端的消息队列中的消息。由于消息队列中的消息在未重复写入时,其对应的编号序列的编号值应是单调递增的,但是当出现重复写入时,其对应的编号序列则不满足单调递增的特征。因此可以根据所述编号值进行下游去重。即在根据当前编号读取消息时,先判断当前编号是否大于前一编号,若是,则直接根据当前编号读取对应消息。否则忽略当前编号,并根据下一编号读取消息。

示例性地,当获取到的编号序列为1、2、3、4、5、3、4时,则可以先读取编号1对应的消息,然后在读取编号2对应的消息时,先判断编号2是否大于前一编号。由于编号2大于编号1,因此可以直接读取编号2对应的消息。依次类推,可以依次读取编号3、编号4和编号5对应的消息。然后在在次读取编号3对应的消息前,由于编号3小于前一编号5,因此可直接忽略第二个编号3,进而根据下一编号读取消息。由于下一编号为4,而该编号4之前的编号3已被忽略,因此可以将编号5作为该编号4的前一编号,由于编号5大于编号4,因此可以忽略该编号4,即忽略该编号4对应的消息。

在本实施例公开的技术方案中,流计算系统先读取源端数据,然后将所述源端数据写入目标端,以在所述目标端中生产带编号的消息,其中,所述编号与所述消息一一对应,且所述编号单调递增,并应用端根据所述编号在所述目标端中读取所述编号对应的所述消息,由于所述编号与消息一一对应且单调递增,因此可以根据所述标号进行下游去重,以避免同一输入对输出造成多次影响,同时,由于流计算系统根据消息编号实现仅一次处理,从而达成提升流计算的兼容性的效果。

参照图3,基于上述实施例,在另一实施例中,所述步骤s30之后,还包括:

步骤s40、获取每一所述消息的业务时间戳及/或业务字段;

步骤s50、根据所述业务时间戳及/或所述业务字段对所述消息进行排序;

步骤s60、所述应用端根据所述排序顺序对所述消息进行处理。

在本实施例中,对于较复杂的程序,一般无法保证程序结果幂等,即多次运行的结果不同。使用单纯使用上述方法可能会导致数据重复或丢失。因此需要通过对消息排序实现幂等。首先是按业务时间戳排序,当业务时间戳相等时,按业务字段。

可以理解的是,也可以根据其它能保证让消息具有唯一顺序的字段,进行排序。

然后根据排序结果依次对所述消息进行处理。

在本实施例公开的技术方案中,由于可以获取每一所述消息的业务时间戳及/或业务字段,然后根据所述业务时间戳及/或所述业务字段对所述消息进行排序,并通过应用端根据所述排序顺序对所述消息进行处理,因此实现了保障复杂程序的幂等的效果。

此外,本发明实施例还提出一种流计算装置,所述流计算装置包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的流计算装置的控制程序,所述流计算装置的控制程序被所述处理器执行时实现如上各个实施例所述的流计算方法的步骤。

此外,本发明实施例还提出、一种流计算系统,所述流计算系统包括数据源端,目标端和应用端,所述流计算系统设置为将数据源端的源端数据读取并写入所述目标端的消息列队,以使应用端根据消息编号在所述消息列队中读取消息。

此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有流计算装置的控制程序,所述流计算装置的控制程序被处理器执行时实现如上各个实施例所述的流计算方法的步骤。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是计算机、服务器等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

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