ITPub博客

首页 > 大数据 > Hadoop > Storm的跟踪算法-异或

Storm的跟踪算法-异或

原创 Hadoop 作者:yanke_shanghai 时间:2016-06-22 15:28:28 0 删除 编辑
Storm 对于 tuple 的跟踪算法是 storm 最大的突破。这个算法使得对于任意大的一个 tuple tree, 它只需要恒定的20字节就可以进行跟踪了
 
Storm 系统中有一组叫做“acker”的特殊任务,它们负责跟踪 DAG(有向无环图)中的每个消息。每当发现一个 DAG 被完全处理,它就向创建这个根消息的 spout 任务发送一个信号。
原理很简单:
1)当一个消息被创建的时候(无论是在 spout 还是 bolt 中),系统都为该消息分配一个 64bit 的随机值作为id。这些 messageid 是 acker 用来跟踪由 spout 消息派生出来的 tuple tree 的。
2)acker 对于每个 tuple 保存一个 ack-val 的校验值(一个64 bit数字),它的初始值是0。 然后每发射一个 tuple (即消息的创建),或者 ack 一个 tuple (即消息的被应答),那么 tuple 的 id 都要跟 ack-val 异或一下,并且把得到的值更新为 ack-val 的新值。假设每个发射出去的 tuple 都被 ack 了, 那么最后 ack-val 一定是0(因为一个数字跟自己异或得到的值是0)。
 
总的来说,ack-val 是这棵树上所有创建的 tuple-id 以及 ack 的 tuple-id 一起异或(XOR)。ack-val 表示了整棵树的的状态,无论这棵树多大,只需要这个固定大小的数字就可以跟踪整棵树。
每当 acker 发现一棵树的 ack val 值为0时,它就知道这棵树已经被完全处理了。
因为消息的随机ID是一个64bit的值,因此ack val在树处理完之前被置为0的概率非常小。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30316686/viewspace-2120714/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 三种存储结构
请登录后发表评论 登录
全部评论

注册时间:2015-06-30

  • 博文量
    65
  • 访问量
    341192