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

流式计算方法、装置、设备以及存储介质

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


流式计算方法、装置、设备以及存储介质

技术领域

本发明实施例涉及计算机技术领域,尤其涉及一种流式计算方法、装置、设备以及存储介质。

背景技术

随着现代业务对实时数据要求越来越高,流式计算技术因其在实时性的性能优势,越来越受到企业实时架构的重视。当前流式数据虽然对于实时数据需求起到非常重要的作用,但也存在难以解决的困难,即数据实时关联的问题:在传统的数据处理,往往避免不了多个数据集合的数据需要进行关联计算的场景。最典型的就是关系型数据库常见的多表JOIN操作或者where条件下的多表联合计算。

而利用流式技术处理实时数据时,如果实时数据中需要进行关联计算的数据来自于多个实时数据源,则因为实时数据源的数据难以同步,可能会导致数据关联失败的结果。对于关系型数据库来说由于进行的是数据全量计算,因此只要通过多次重复执行计算规则,即可以达到数据结果的最终一致,此问题可以得到解决。

但是对于流式计算技术,由于处理的数据是增量数据,一旦流式计算过程结束,则完成计算的数据则不会再次进行计算,否则容易引起数据重复计算的问题,因此难以解决这种多个实时数据源的数据不同步问题。

发明内容

本发明实施例提供一种流式计算方法、装置、设备以及存储介质,以解决多个实时数据源的数据不同步问题。

第一方面,本发明实施例提供了一种流式计算方法,所述方法包括:

为待处理的目标流式计算任务开启至少一个工作进程;

控制所述至少一个工作进程在zookeeper分布式应用程序协调服务上进行竞争,抢注所述目标流式计算任务的领导节点,抢注成功的工作进程成为领导节点,并在zookeeper建立领导管理目录;

控制包括所述领导进程在内的所有工作进程在所述领导管理目录上注册成为所述目标流式计算任务的工人节点;

领导节点负责在zookeeper初始化所述目标流式计算任务的延时队列初始根目录,所有工人节点在根目录下创建各自节点对应的延时队列,在所述领导管理目录记录各自管理的延时队列信息;

工人节点启动延时处理线程池,为后续的延时任务做准备;

每个工人节点在流式计算过程中,若检测到进行实时关联计算失败的数据,则判断该数据是否需要进行延时处理;若需要进行延时处理,则将该数据的信息注册到该数据关联的工人节点的延时队列;

延时处理线程根据配置的时间周期,定时从延时队列中依次获取数据信息并进行检查,确认数据是否能处理成功;若数据能够处理成功,则处理数据并从延时队列中删除该数据节点,否则等待下一个周期的处理。

第二方面,本发明实施例提供了一种流式计算装置,所述装置包括:

进程开启模块,用于为待处理的目标流式计算任务开启至少一个工作进程;

节点竞争模块,用于控制所述至少一个工作进程在zookeeper分布式应用程序协调服务上进行竞争,抢注所述目标流式计算任务的领导节点,抢注成功的工作进程成为领导节点,并在zookeeper建立领导管理目录;

节点注册模块,用于控制包括所述领导进程在内的所有工作进程在所述领导管理目录上注册成为所述目标流式计算任务的工人节点;

队列创建模块,用于领导节点负责在zookeeper初始化所述目标流式计算任务的延时队列初始根目录,所有工人节点在根目录下创建各自节点对应的延时队列,在所述领导管理目录记录各自管理的延时队列信息;

线程启动模块,用于工人节点启动延时处理线程池,为后续的延时任务做准备;

延时判断模块,用于每个工人节点在流式计算过程中,若检测到进行实时关联计算失败的数据,则判断该数据是否需要进行延时处理;若需要进行延时处理,则将该数据的信息注册到该数据关联的工人节点的延时队列;

延时处理模块,用于延时处理线程根据配置的时间周期,定时从延时队列中依次获取数据信息并进行检查,确认数据是否能处理成功;若数据能够处理成功,则处理数据并从延时队列中删除该数据节点,否则等待下一个周期的处理。

第三方面,本发明实施例还提供了一种设备,所述设备包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本实施例中任一所述的流式计算方法。

第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本实施例中任一所述的流式计算方法。

本发明实施例通过基于Zookeeper设计的轻量级的实时数据延时处理机制,能够在付出较低的资源代价的情况下,提供精确度更高的实时数据处理能力,从而解决个实时数据源的数据不同步问题。

附图说明

图1为本发明实施例一提供的一种流式计算方法的流程图;

图2是本发明实施例二提供的一种流式计算方法的流程图;

图3是本发明实施例三提供的一种流式计算方法的流程图;

图4是本发明实施例四提供的一种流式计算装置的结构示意图;

图5为本发明实施例五提供的一种设备的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

图1为本发明实施例一提供的一种流式计算方法的流程图。本实施例可适用于对来自于多个实时数据源中的实时数据进行关联计算的的情况。该方法可以由一种流式计算装置来执行,该装置可以由软件和/或硬件的方式实现。参见图1,本申请实施例提供的流式计算方法包括:

为待处理的目标流式计算任务开启至少一个工作进程。

其中,目标流式计算任务是待处理的流式计算任务。工作进程是指处理目标流式计算任务的进程。进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位

控制所述至少一个工作进程在zookeeper上进行竞争,抢注所述目标流式计算任务的领导节点,抢注成功的工作进程成为领导节点,并在zookeeper建立领导管理目录。

其中,领导节点是指具有管理权的节点,也称leader节点。

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

控制包括所述领导进程在内的所有工作进程在所述领导管理目录上注册成为所述目标流式计算任务的工人节点。

其中,工人节点是指听从领导节点管理的节点,也称worker节点。

领导节点负责在zookeeper初始化所述目标流式计算任务的延时队列初始根目录,所有工人节点在根目录下创建各自节点对应的延时队列,在所述领导管理目录记录各自管理的延时队列信息。

工人节点启动延时处理线程池,为后续的延时任务做准备。

每个工人节点在流式计算过程中,若检测到进行实时关联计算失败的数据,则判断该数据是否需要进行延时处理;若需要进行延时处理,则将该数据的信息注册到该数据关联的工人节点的延时队列。

延时处理线程根据配置的时间周期,定时从延时队列中依次获取数据信息并进行检查,确认数据是否能处理成功;若数据能够处理成功,则处理数据并从延时队列中删除该数据节点,否则等待下一个周期的处理。

其中,周期时间可以根据实际需要进行配置。

进一步地,所述控制包括所述领导进程在内的所有工作进程在所述领导管理目录上注册成为所述目标流式计算任务的工人节点之后,所述方法还包括:

工人节点监控领导节点在zookeeper注册的临时节点的生存状态;

若监控到领导节点下线,则重新竞争领导节点的选举。

本发明实施例通过基于Zookeeper设计的轻量级的实时数据延时处理机制,能够在付出较低的资源代价的情况下,提供精确度更高的实时数据处理能力,从而解决个实时数据源的数据不同步问题。

实施例二

图2是本发明实施例二提供的一种流式计算方法的流程图。本实施例是在上述实施例的基础上,为解决工人节点关联的进程关闭后,该工人节点未处理成功的延时队列接管问题,所述控制包括所述领导进程在内的所有工作进程在所述领导管理目录上注册成为所述目标流式计算任务的工人节点之后,所述方法还包括:

领导节点定期检查所有延时队列是否由工人节点负责管理;

若检测到目标延时队列没有工人节点处理,则继续检查所述目标延时队列是否为空;

若所述目标延时队列为空,则清理该延时队列;否则,根据当前工人节点的负载情况,选择接管的工人节点,并向该工人节点发送接管指令;

该工人节点根据本节点的负载处理信息确定是否接管所述目标延时队列。

进一步地,所述该工人节点根据本节点的负载处理信息确定是否接管所述目标延时队列之后,所述方法还包括:

若接管,则该工人节点向所述领导管理目录注册所述目标延时队列的接管信息,并继续处理所述目标延时队列的遗留实时数据;

其中所述目标延时队列不再写入新数据,直到所述目标延时队列数据全部处理完毕;

在所述目标延时队列数据全部处理完毕后,工人节点向所述领导节点发送指令,以指示所述领导节点删除所述目标延时队列。

进一步地,所述接管工人节点根据本节点的负载处理信息确定是否接管所述目标延时队列之后,所述方法还包括:

若无工人节点接管所述目标延时队列,则所述领导节点定期返回执行所述根据当前工人节点的负载情况,选择接管工人节点,并向所述接管工人节点发送接管指令的操作,直到所述目标延时队列有工人节点接管。

其中,领导节点定期检查延时队列的周期可以根据实际需要配置。

本发明实施例的技术方案通过对无工人节点处理的,且为空的延时队列进行清理,对非空的延时队列,根据当前工人节点的负载情况,请求工人节点接管,从而解决工人节点关联的进程关闭后,该工人节点未处理成功的延时队列接管问题。

实施例三

图3是本发明实施例三提供的一种流式计算方法的流程图。本实施例是在上述实施例的基础上,为解决过长的延时队列对zookeeper造成资源压力问题,所述控制包括所述领导进程在内的所有工作进程在所述领导管理目录上注册成为所述目标流式计算任务的工人节点之后,所述方法还包括:

领导节点检查各个延时队列的最后修改时间,若该队列的最后修改时间已经超过配置的时间阈值,则检查该队列是否有工人节点接管;

若无工人节点管理,则领导节点清理该队列;

若有工人节点管理,则领导节点发布对该队列的清理请求,与该队列关联的工人节点接受请求并负责检查该队列是否需要清理;

若需要清理,则清理该队列,清理完毕后,若确定该队列无需存在,则删除该队列;

若不需要清理,则更新该队列的修改时间,并告知所述领导节点清理完毕;

领导节点在接受到清理完毕的请求后,结束清理任务。

进一步地,所述若有工人节点管理,则领导节点发布对该队列的清理请求之后,所述方法还包括:

若领导节点接收到强制清理请求,则发送强制清理请求到关联的工人节点,由关联的工人节点进行队列清理;

若无关联的工人节点,则由领导节点清理。

其中,时间阈值可以根据实际需要进行配置。

本发明实施例通过定期检查延时队列是否超时,并在确定超时后对超时延迟队列进行清理,以解决上述过长的延时队列对zookeeper造成资源压力问题。

实施例四

图4是本发明实施例四提供的一种流式计算装置的结构示意图。参见图4,本发明实施例提供的流式计算装置包括:进程开启模块401、节点竞争模块402、节点注册模块403、队列创建模块404、线程启动模块405、延时判断模块406和延时处理模块407。

其中,进程开启模块401,用于为待处理的目标流式计算任务开启至少一个工作进程;

节点竞争模块402,用于控制所述至少一个工作进程在zookeeper分布式应用程序协调服务上进行竞争,抢注所述目标流式计算任务的领导节点,抢注成功的工作进程成为领导节点,并在zookeeper建立领导管理目录;

节点注册模块403,用于控制包括所述领导进程在内的所有工作进程在所述领导管理目录上注册成为所述目标流式计算任务的工人节点;

队列创建模块404,用于领导节点负责在zookeeper初始化所述目标流式计算任务的延时队列初始根目录,所有工人节点在根目录下创建各自节点对应的延时队列,在所述领导管理目录记录各自管理的延时队列信息;

线程启动模块405,用于工人节点启动延时处理线程池,为后续的延时任务做准备;

延时判断模块406,用于每个工人节点在流式计算过程中,若检测到进行实时关联计算失败的数据,则判断该数据是否需要进行延时处理;若需要进行延时处理,则将该数据的信息注册到该数据关联的工人节点的延时队列;

延时处理模块407,用于延时处理线程根据配置的时间周期,定时从延时队列中依次获取数据信息并进行检查,确认数据是否能处理成功;若数据能够处理成功,则处理数据并从延时队列中删除该数据节点,否则等待下一个周期的处理。

本发明实施例通过基于Zookeeper设计的轻量级的实时数据延时处理机制,能够在付出较低的资源代价的情况下,提供精确度更高的实时数据处理能力,从而解决个实时数据源的数据不同步问题。

进一步地,所述装置还包括:

状态监控模块,用于所述控制包括所述领导进程在内的所有工作进程在所述领导管理目录上注册成为所述目标流式计算任务的工人节点之后,工人节点监控领导节点在zookeeper注册的临时节点的生存状态;

重新竞选模块,用于若监控到领导节点下线,则重新竞争领导节点的选举。

进一步地,所述装置还包括:

检测接管信息模块,用于所述控制包括所述领导进程在内的所有工作进程在所述领导管理目录上注册成为所述目标流式计算任务的工人节点之后,领导节点定期检查所有延时队列是否由工人节点负责管理;

检测队列大小模块,用于若检测到目标延时队列没有工人节点处理,则继续检查所述目标延时队列是否为空;

请求接管模块,用于若所述目标延时队列为空,则清理该延时队列;否则,根据当前工人节点的负载情况,选择接管的工人节点,并向该工人节点发送接管指令;

接管确定模块,用于该工人节点根据本节点的负载处理信息确定是否接管所述目标延时队列。

进一步地,所述装置还包括:

队列接管模块,用于所述该工人节点根据本节点的负载处理信息确定是否接管所述目标延时队列之后,若接管,则该工人节点向所述领导管理目录注册所述目标延时队列的接管信息,并继续处理所述目标延时队列的遗留实时数据;

其中所述目标延时队列不再写入新数据,直到所述目标延时队列数据全部处理完毕;

第一队列删除模块,用于在所述目标延时队列数据全部处理完毕后,工人节点向所述领导节点发送指令,以指示所述领导节点删除所述目标延时队列。

进一步地,所述装置还包括:

指令发送模块,用于所述接管工人节点根据本节点的负载处理信息确定是否接管所述目标延时队列之后,若无工人节点接管所述目标延时队列,则所述领导节点定期返回执行所述根据当前工人节点的负载情况,选择接管工人节点,并向所述接管工人节点发送接管指令的操作,直到所述目标延时队列有工人节点接管。

进一步地,所述装置还包括:

接管判断模块,用于所述控制包括所述领导进程在内的所有工作进程在所述领导管理目录上注册成为所述目标流式计算任务的工人节点之后,领导节点检查各个延时队列的最后修改时间,若该队列的最后修改时间已经超过配置的时间阈值,则检查该队列是否有工人节点接管;

队列清理模块,用于若无工人节点管理,则领导节点清理该队列;

请求发布模块,用于若有工人节点管理,则领导节点发布对该队列的清理请求,与该队列关联的工人节点接受请求并负责检查该队列是否需要清理;

第二队列删除模块,用于若需要清理,则清理该队列,清理完毕后,若确定该队列无需存在,则删除该队列;

时间更新模块,用于若不需要清理,则更新该队列的修改时间,并告知所述领导节点清理完毕;

任务结束模块,用于领导节点在接受到清理完毕的请求后,结束清理任务。

进一步地,所述装置还包括:

强制清理请求模块,用于所述若有工人节点管理,则领导节点发布对该队列的清理请求之后,若领导节点接收到强制清理请求,则发送强制清理请求到关联的工人节点,由关联的工人节点进行队列清理;

强制清理模块,若无关联的工人节点,则由领导节点清理。

实施例五

图5为本发明实施例五提供的一种设备的结构示意图,如图5所示,该设备包括处理器50、存储器51、输入装置52和输出装置53;设备中处理器50的数量可以是一个或多个,图5中以一个处理器50为例;设备中的处理器50、存储器51、输入装置52和输出装置53可以通过总线或其他方式连接,图5中以通过总线连接为例。

存储器51作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的数据处理方法对应的程序指令/模块(例如,流式计算装置包括的进程开启模块401、节点竞争模块402、节点注册模块403、队列创建模块404、线程启动模块405、延时判断模块406和延时处理模块407)。处理器50通过运行存储在存储器51中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的数据处理方法。

存储器51可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器51可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器51可进一步包括相对于处理器50远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置52可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置53可包括显示屏等显示设备。

实施例六

本发明实施例六还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种流式计算方法,所述方法包括:

为待处理的目标流式计算任务开启至少一个工作进程;

控制所述至少一个工作进程在zookeeper分布式应用程序协调服务上进行竞争,抢注所述目标流式计算任务的领导节点,抢注成功的工作进程成为领导节点,并在zookeeper建立领导管理目录;

控制包括所述领导进程在内的所有工作进程在所述领导管理目录上注册成为所述目标流式计算任务的工人节点;

领导节点负责在zookeeper初始化所述目标流式计算任务的延时队列初始根目录,所有工人节点在根目录下创建各自节点对应的延时队列,在所述领导管理目录记录各自管理的延时队列信息;

工人节点启动延时处理线程池,为后续的延时任务做准备;

每个工人节点在流式计算过程中,若检测到进行实时关联计算失败的数据,则判断该数据是否需要进行延时处理;若需要进行延时处理,则将该数据的信息注册到该数据关联的工人节点的延时队列;

延时处理线程根据配置的时间周期,定时从延时队列中依次获取数据信息并进行检查,确认数据是否能处理成功;若数据能够处理成功,则处理数据并从延时队列中删除该数据节点,否则等待下一个周期的处理。

当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的测试方法中的相关操作。

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

值得注意的是,上述流式计算装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

相关技术
  • 流式计算方法、装置、设备以及存储介质
  • 一种并行流式计算方法、电子设备、存储介质及系统
技术分类

06120112966155