我的拓扑使用默认的KafkaSpout
实现。在一些非常有控制的测试中,我发现即使我的螺栓都没有通过任何元组失败,我的插件仍然没有出现故障,我确信所有消息都在我配置的超时内完全处理完毕。
我也注意到(由于我的螺栓有一些子分类结构),我的一个螺栓是两次攻击元组。当我修复它时,喷口停止了元组失效。
很抱歉,这不仅仅是一个健全性检查而不是一个问题,但这是否有意义?我不知道为什么两次同一个元组实例会导致Spout注册超时,但似乎这是我的情况?
答案 0 :(得分:5)
确实有意义。
Storm以奇怪但有效的方式跟踪由喷口发出的元组的所有特征(直接和间接)。我不确定确切的算法,但它需要反复XOR'ing最初的spout发出的元组ID与后续锚定元组ID的ID。这些后续ID中的每一个都被异或两次 - 一次是在元组被锚定时,一次是在元组被激活时。当XOR的结果全为零时,则假设每个锚点都与ack匹配,并且原始喷出的元组已完成处理。
通过不止一次地修改一些元组,你似乎发现一些喷出的元组没有完全完成(因为奇数的XOR永远不会为零)。