使用KafkaSpout,两次激活元组会导致超时?

ab1*_*b11 3 apache-storm

我的拓扑使用默认KafkaSpout实现.在一些非常有控制的测试中,我注意到spout是失败的元组,即使我的螺栓都没有失败任何元组,我确信所有消息都在我配置的超时内完全处理完毕.

我也注意到(由于我的螺栓有一些子分类结构),我的一个螺栓是两次攻击元组.当我修复它时,喷口停止了故障元组.

对不起,这不仅仅是一个完整性检查而不是一个问题,但这有意义吗?我不明白为什么两次使用相同的元组实例会导致Spout注册超时,但似乎这是我的情况?

Chr*_*ken 5

它确实有意义.

Storm以奇怪但有效的方式跟踪由喷口发出的元组的所有特征(直接和间接).我不确定确切的算法,但它需要反复XOR'ing最初的spout发出的元组ID与后续锚定元组ID的ID.这些后续ID中的每一个都被异或两次 - 一次是在元组被锚定时,一次是在元组被激活时.当XOR的结果全为零时,则假设每个锚由ack匹配并且原始喷口发射的元组已完成处理.

通过不止一次地修改一些元组,你似乎发现一些喷出的元组没有完全完成(因为奇数的XOR永远不会为零).