Storm【Storm0.9.3】- ACK 框架有意的补充

  之前对于Storm的Acker机制进行了一些数学上的描述。 

   在这里,对于Storm的Ack机制 在源码实现上进行一些有意的补充。  


1: 在Ack框架的设计之中,Storm发射出去的消息都会对应于一个随机的消息ID号。


2 : Spout发射消息之后。将像Acker Bolt发射一个消息,这个消息的内容为 《RootID,消息ID》 Acker Bolt将会为该消息创

建一条跟踪项


3: Bolt产生要发射的消息的过程之中,也会将该消息ID发射Acker Bolt,AckerBolt 对消息ID进行异或以后进行存储。


4: Bolt在对于输入的消息进行Ack的过程之中,也会将该消息ID发射到 AckerBolt,Acker Bolt对于消息ID进行亦或以后再存储,由于该消息在被发射之时,已经向Acker Bolt发射过了ID,之后在被Ack 时又再次发射该消息ID,一句 【与或】的语义,这相当于对于该消息的跟踪的结束。

5:Acker Bolt 在更新某一个消息的跟踪值时,若发现他的值变为0,那么就会像Spout节点发射消息,表名,Spout发射的这条消息已经被成功的处理 。


6:所有消息的消息ID 都将更新到最  根上( /root ) 树上的,根消息为Spout发射出去的消息,Bolt新产生的消息并不会被单独跟踪


7:如果你在发射的过程之中,没有指定用于消息跟踪的ID,那么系统就不对消息进行跟踪,若系统中不含有Ack bolt,消息也不会被跟踪。


8: Spout的每条消息以及该消息所演化出来的消息的跟踪 容量负载为:《16个字节》,8个字节的根消息ID,以及8个字节的消息跟踪值《AckValue》,  事实上,由于Storm中采用的是HashMap对其进行的跟踪,在32位的JVM之中,每条消息至少需要20个字节的额外负载,故有一条消息的跟踪需要 40个左右的负载。


   具体的代码实现分析,可能需要 Cloujre的分析基础,如果您有兴趣,亲个参考本ID的其他系列:  

     Storm【Storm0.9.3】- 源码分析:ACK 框架之 Acker Bolt的实现分析 

你可能感兴趣的:(Storm【Storm0.9.3】- ACK 框架有意的补充)