首页 > 解决方案 > 为什么storm使用XOR来确保拓扑中的每个Bolts都成功执行。而不是计数器

问题描述

我是风暴的初学者。Storm 的创建者创造了一种非常令人印象深刻的方法来检查拓扑中的每个螺栓,它使用 XOR。但我开始想知道他为什么不使用计数器。当一个 Bolts 成功执行时,计数器将减一。所以当计数器等于 0 时,意味着整个任务已经完成。

谢谢

标签: apache-storm

解决方案


我相信人们可以解释为什么计数器不仅效率低下,而且在始终运行的拓扑中是一种不正确的 acker 跟踪器机制。

  • Storm tuple 拓扑本身可以是一个复杂的 DAG。当一个bolt从多个下游源接收到ack时,它与计数器有什么关系?它应该增加它们,它应该总是减少它们吗?以什么顺序?

  • 风暴元组具有随机消息 ID。计数器将是有限的。一个拓扑永远运行,发出数十亿个元组。您将如何将第 673686557 个元组映射到计数器 ID?使用 XOR,您只需维护和广播一个状态。

  • XOR 操作是执行效率极高的硬件指令。计数器很长,需要大量存储空间。它们存在溢出问题,并且以低空间开销满足了解决方案的原始要求。


推荐阅读