我正在使用Apache Storm进行并行处理。我想检测元组何时处于其最后一次重播计数,以便如果它再次失败,则可以将元组移动到死信队列。
有没有办法从博尔特内找到重播次数?我无法在元组中找到这样的字段。
我正在寻找最后一次重播计数的原因是为了解决我们的拓扑问题,以便由于错误和下游服务中断而导致更具弹性的故障。当bug /下游问题得到解决后,可以从死信队列中重新处理元组。但是我想把元组放在死信队列上,只是在最后和最后一次重播时。
答案 0 :(得分:1)
这个问题有多种可能的答案:
您是否使用低级Java API来定义拓扑?如果是,请参阅此处:Storm: Is it possible to limit the number of replays on fail (Anchoring)?
您还可以使用事务拓扑。文档在这里:https://storm.apache.org/documentation/Transactional-topologies.html
限制重放次数意味着计算重放次数,并且要求完成重播。但是,Storm本身并不支持死信队列或类似的。您需要使用可靠的外部分布式存储系统(可能是Kafka),如果重播次数超过您的阈值,则将元组放在那里。在你的鲸鱼喷水中,你需要定期检查这个外部存储中的元组。如果它们存放在那里足够长的时间" (无论你的应用程序意味着什么),喷口可以尝试重新处理。