storm-ACK的实现原理

异或运行基本原理

异或xor也叫半加运行,其运行法则相当于不带进位的二进制加法:

0 xor  0=0

1 xor 1 = 0

0 xor 1 =1

1 xor 0= 1

异或运行特性

1.交换律

 a xor b=b xor a

2.结合律

a xor (b xor c)= (a xor b) xor c

3.自反性

a xor a=0

a xor b xor b=a xor 0 =a
自反性即两个相同的数做异或运行结果为0; 而0 和另一个数据异或结果还是那个数。

可以用异或运行的自反性除去集合中偶数个的数。

storm的ack实现原理

Storm的Acker跟踪每个元组树(tupletree)校验和完成。每次一个元组被发射,对他的值起行异或运行并存到校验和中,每次元组被ack

时它的值被再次异或运算。如果所有元组已经成功ack,则校验和为0.

Storm的Ack框架实现过程为:在Spout 中系统会为用户指定的message id 生成一个对应的64位的整数,作为一个root id。root id被传递

给后续的Bolt作为该 消息的唯一标识。同是无论是Spout还是Bolt每次生成一个新的tuple的时候,都会赋予一个64位的整数id。Spout发

射完某个message id对就的源 tuple之后,会告知Acker自己发射的root id及新生成的tuple的 id.Bolt每次接收到一个输入的tuple处理之后

,也会告知自己处理的输入 tuple的id 及新生成的tuple的id .Acker对这些id做一个简单的异或运算,就能判断出该root id对应的消息单元是

否处理完。

相关文章

相关标签/搜索