异或运行基本原理
异或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对应的消息单元是
否处理完。