一种storm数据流反压方法以及节点与流程

文档序号:15846024发布日期:2018-11-07 09:02阅读:405来源:国知局
一种storm数据流反压方法以及节点与流程

本发明涉及storm数据流反压技术,尤指一种storm数据流反压方法以及节点。

背景技术

分布式实时大数据处理组件apachestorm由于其强大的实时计算能力被广泛应用于实时搜索、高频交易和社交网络等场景,受到业界一致好评。然而,分布式实时大数据流式框架storm在大数据库流式计算环境中,由于读取数据源的spout节点及数据处理bolt节点之间对数据处理能力差异明显,导致大量数据流元组tuple被丢弃。

针对storm在突发性数据流中存在的tuple处理超时而失败的问题,业界与学术界开展了一系列的研究工作。storm提出了一种机制,当输入的数据流元组无法被及时处理或者元组的到达速率超过其被处理速率时,发送者会简单地丢弃这些tuple,触发限流控制,从spout处暂停数据源的发送,这一机制称为反压机制。当下游出现过载时,上游停止发送,下游消除过载后,上游开始放流。然后下游过载,上游又停止发送数据,如此反复,可能导致整个数据流一直处在震荡状态,必然影响整个apachestorm集群计算效率。因此,反压机制的高稳定性、有效性成为storm计算框架亟待解决的问题。



技术实现要素:

为了解决上述技术问题,本发明提供了一种storm数据流反压方法和节点,可以避免storm数据流处于震荡状态。

本发明提供的一种storm数据流反压方法,包括:

节点设置接收队列和发送队列,所述节点包括数据源读取节点spout和数据处理节点bolt,所述接收队列用于保存上游节点发送的数据流元组tuple,所述发送队列用于保存并向下游节点发送本节点已处理完毕的数据流元组tuple;

节点接收到来自下游节点的过载消息后,根据下游节点接收队列的大小自适应减小自身的发送队列大小;以及根据减小后的发送队列大小自适应减小自身的接收队列大小;

节点接收到来自上游节点的过载消息后,根据上游节点发送队列大小自适应减小自身的接收队列大小,以及根据减小后的接收队列大小自适应减小自身的发送队列大小。

本发明提供的一种storm数据流反压节点,所述节点包括数据源读取节点spout和数据处理节点bolt,每个节点包括:

接收队列,用于保存上游节点发送的数据流元组tuple;

发送队列,用于保存并向下游节点发送本节点已处理完毕的数据流元组tuple;

过载模块,用于在本节点过载时产生过载消息,并发送过载消息;

调整模块,用于接收到来自下游节点的过载消息后,根据下游节点接收队列的大小自适应减小发送队列大小,以及根据减小后的发送队列大小自适应减小接收队列大小;接收到来自上游节点的过载消息后,根据上游节点发送队列大小自适应减小接收队列大小,以及根据减小后的接收队列大小自适应减小发送队列大小。

本发明提供了一种计算机可读存储介质,所述介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现上述的storm数据流反压方法。

本发明提供了一种storm数据流反压设备,包括:

存储器,设置为存储指令;

处理器,设置为执行所述指令,实现上述的storm数据流反压方法的步骤。

与现有技术相比,本发明中节点设置接收队列和发送队列,所述接收队列用于保存上游节点发送的数据流元组tuple,所述发送队列用于保存并向下游节点发送本节点已处理完毕的数据流元组tuple;节点接收到来自下游节点的过载消息后,根据下游节点接收队列的大小自适应减小自身的发送队列大小;以及根据减小后的发送队列大小自适应减小自身的接收队列大小;节点接收到来自上游节点的过载消息后,根据上游节点发送队列大小自适应减小自身的接收队列大小,以及根据减小后的接收队列大小自适应减小自身的发送队列大小。本发明在节点出现过载的时候,对上游的数据和下游数据进行限流,避免了下游出现过载时,上游停止发送,如此反复导致的数据流震荡状态。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。

图1为本发明实施例提供的storm数据流反压方法流程图;

图2为本发明实施例反压消息在节点中的传输示意图;

图3为本发明实施例提供的storm数据流反压节点模块图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图1为本发明实施例提供的storm数据流反压方法流程图,如图1所示,所述方法包括:

s101节点设置接收队列和发送队列;

所述节点包括数据源读取节点spout和数据处理节点bolt;

所述接收队列用于保存上游节点发送的数据流元组tuple,所述发送队列用于保存并向下游节点发送本节点已处理完毕的数据流元组tuple;

s102节点接收到来自下游节点的过载消息后,根据下游节点接收队列的大小自适应减小自身的发送队列大小;以及根据减小后的发送队列大小自适应减小自身的接收队列大小;

节点接收到来自上游节点的过载消息后,根据上游节点发送队列大小自适应减小自身的接收队列大小,以及根据减小后的接收队列大小自适应减小自身的发送队列大小。

同一个节点接收队列和发送队列大小之间存在正相关性,节点在自身的发送队列或接收队列大小变化时,以相同的变化趋势调整节点的接收队列或发送队列大小,以适应所述发送队列或接收队列处理能力的变化。

所述过载消息可以由节点发送给apachestorm中的zookeeper,由zookeeper再发送给该节点的上游节点和/或下游节点,如图2所示。

在一可选实施例中,节点接收到来自下游节点的过载消息后,根据下游节点接收队列的大小自适应减小自身的发送队列大小;以及根据减小后的发送队列大小自适应减小自身的接收队列大小;节点接收到来自上游节点的过载消息后,根据上游节点发送队列大小自适应减小自身的接收队列大小,以及根据减小后的接收队列大小自适应减小自身的发送队列大小,包括:

节点接收到来自下游节点的过载消息后,将自身的发送队列大小设置为当前发送队列大小的一半,以及将自身的接收队列大小设置为当前接收队列大小的一半;

节点接收到来自上游节点的过载消息后,将自身的接收队列大小设置为当前接收队列大小的一半,以及将自身的发送队列大小设置为当前发送队列大小的一半。

在一可选实施例中,所述方法还包括:

节点接收到过载解除的消息后,线性增加自身的队列大小,如,节点每处理一个tuple,队列大小加1。

在一可选实施例中,所述方法还包括:

节点若从未接收到过载消息,指数增加自身的队列大小,如节点每处理一个tuple,队列大小乘2。

下面以一个具体的应用示例对上述实施例进行说明。

apachestorm应用初始,节点没有发生过载,每个节点的接收队列和发送队列按照指数级不断增加队列大小,即节点每处理一个tuple队列大小乘以2,直至节点发生过载。

发生过载的节点向zookeeper发送反压消息,指示其下游节点的接收队列和上游节点的发送队列大小设置为当前队列大小的一半;其下游节点接收到所述反压消息后,按照反压消息的指示减小接收队列,同时自适应减小自身的发送队列大小;其上游节点接收到所述反压消息后,按照反压消息的指示减小发送队列大小,同时自适应减小自身接收队列大小;

接收到反压消息的节点通过zookeeper继续向其上游节点或下游节点发送所述反压消息;

当发生过载的节点过载消除后,也向zookeeper发送反压消息,指示其下游节点的队列和上游节点的队列大小按照线性增长,每次加1。

接收到所述反压消息的节点调整自身的队列大小后,通过zookeeper继续向其上游节点或下游节点发送所述反压消息;

当再次发生过载时,发生过载的节点继续向zookeeper发送反压消息,指示其下游节点的接收队列和上游节点的发送队列大小设置为当前队列大小的一半;

接收到反压消息的节点继续调节自身队列大小,此次调节后的队列大小小于第一次调节后的队列大小,因此这是一个收敛的过程。该过程无限地继续下去,在数据处理的大部分时间里,队列大小都接近于其处理能力的最佳值。

反压消息产生算法伪代码如下:

1.input:tuple

2.output:反压消息

3.initial:count=0;//反压的次数计数

4.if(overload){//过载,自动反压消息

5.bp=1;//反压标记

6.change=0.5;

7.operation="*";//队列大小将按照size*0.5调整

8.name="up_chain";

9.count++:

10.}else{//没有发生过载,解除反压

11.bp=-1;//解除反压标记

12.if(count>0){

13.change=1;

14.operation="+";//将按照size+1进行调整

15.name="up_chain";

16.}

17.}

18.sendmessagetozookeeper();//向zookeeper发送反压消息

当名称为up_chain的bolt/spout节点收到消息时,解析消息内容,根据消息内容进行队列大小的调整。

根据反压消息调整队列大小伪代码如下所示:

1.input:反压消息

2.output:队列大小

3.initial:size=9999999;//初始队列大小,表示不限制大小

4.getmessagefromzk();//从zookeeper中得到消息

5.if(消息为空){//表示没有过载

6.size=size*2;//指数增大

7.}else{

8.if(operation="*"){

9.size=size*change;//变为原来的一半

10.}else{

11.size=size+change;//加1

12.}

13.}

14.if(size<queue.size()//队列已满,即发生过载){

15.//发送队列只接收,不再发送。

16.//只处理接收队列中元组,不再接收。

17.sendmessagetozookeeper();//级联发送反压消息到其上游

18.}

本发明提出的storm数据流反压机制,在节点出现过载的时候,对上游的数据和下游数据进行限流,避免了下游出现过载时,上游停止发送,如此反复导致的数据流震荡状态;通过动态自适应调整各环节的队列大小,细粒度调整数据流速度,有效缩短tuple处理时延,而且能够提高集群吞吐量。

本发明实施例还提供了一种storm数据流反压节点,如图3所示,所述节点数据源读取节点spout和数据处理节点bolt,每个节点包括:

接收队列300,用于保存上游节点发送的数据流元组tuple;

发送队列301,用于保存并向下游节点发送本节点已处理完毕的数据流元组tuple;

过载模块302,用于在本节点过载时产生过载消息,并发送过载消息;

调整模块303,用于接收到来自下游节点的过载消息后,根据下游节点接收队列的大小自适应减小发送队列大小,以及根据减小后的发送队列大小自适应减小接收队列大小;接收到来自上游节点的过载消息后,根据上游节点发送队列大小自适应减小接收队列大小,以及根据减小后的接收队列大小自适应减小发送队列大小。

同一个节点接收队列和发送队列大小之间存在正相关性,调整模块301在节点的发送队列或接收队列大小变化时,以相同的变化趋势调整自身的接收队列或发送队列大小,以适应所述发送队列或接收队列处理能力的变化。

所述过载消息可以由节点发送给apachestorm中的zookeeper,由zookeeper再发送给该节点的上游节点和/或下游节点,如图2所示。

在一可选实施例中,调整模块303,用于接收到来自下游节点的过载消息后,将节点的发送队列大小设置为当前发送队列大小的一半,以及将接收队列大小设置为当前接收队列大小的一半;接收到来自上游节点的过载消息后,将节点的接收队列大小设置为当前接收队列大小的一半,以及将发送队列大小设置为当前发送队列大小的一半。

在一可选实施例中,

调整模块303,还用于在节点接收到过载解除的消息后,线性增加节点的队列大小,如,节点每处理一个tuple,队列大小加1。

在一可选实施例中,

调整模块303,还用于在节点从未接收到过载消息的情况下,指数增加节点的队列大小,如节点每处理一个tuple,队列大小乘2。

本发明提出的storm数据流反压机制,在节点出现过载的时候,对上游的数据和下游数据进行限流,避免了下游出现过载时,上游停止发送,如此反复导致的数据流震荡状态;通过动态自适应调整各环节的队列大小,细粒度调整数据流速度,有效缩短tuple处理时延,而且能够提高集群吞吐量。

本发明实施例还提供了一种计算机可读存储介质,所述介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现上述的storm数据流反压方法。

本发明实施例还提供了一种storm数据流反压设备,包括:

存储器,设置为存储指令;

处理器,设置为执行所述指令,实现上述的storm数据流反压方法的步骤。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

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