默认情况下,当风暴喷口或螺栓遇到异常时,它将重新启动喷口或螺栓并重试。是否有任何配置选项使其停止拓扑(可能在n次重复尝试之后)(例如,hadoop在放弃之前尝试了4次。)我的storm拓扑运行了77天,其中一个螺栓在每个元组上引发了一个异常。在这样的情况下,我宁愿失败,这样我就会注意到出了问题。
f45qwnt81#
据我所知,storm不会重试元组(它本身导致了异常)。默认情况下,它将继续处理下一个元组。相同的元组不会被重新尝试,除非spout实现了fail方法。
3zwjbxry2#
没有停止拓扑的选项(当前)。老实说,杀死整个拓扑仅仅因为一个例外就是暴力。在您的场景中,这些异常应该在应用程序层中处理。是否有任何配置选项使其停止拓扑(可能在n次重复尝试之后)?没有现成的解决方案,但您可以做到这一点,并保持跟踪检索元组在喷口。如果满足阈值,则记录元组或将其发送到消息传递队列。我的storm拓扑运行了77天,其中一个螺栓在每个元组上引发了一个异常。那你的bolt代码里可能有个bug?一种策略是将失败的元组发送到消息队列或事件总线(如hornetq、apachekafka、redis),并拥有一个侦听器,这样您将立即收到有毒元组的通知。
2条答案
按热度按时间f45qwnt81#
据我所知,storm不会重试元组(它本身导致了异常)。默认情况下,它将继续处理下一个元组。相同的元组不会被重新尝试,除非spout实现了fail方法。
3zwjbxry2#
没有停止拓扑的选项(当前)。老实说,杀死整个拓扑仅仅因为一个例外就是暴力。
在您的场景中,这些异常应该在应用程序层中处理。
是否有任何配置选项使其停止拓扑(可能在n次重复尝试之后)?
没有现成的解决方案,但您可以做到这一点,并保持跟踪检索元组在喷口。如果满足阈值,则记录元组或将其发送到消息传递队列。
我的storm拓扑运行了77天,其中一个螺栓在每个元组上引发了一个异常。
那你的bolt代码里可能有个bug?
一种策略是将失败的元组发送到消息队列或事件总线(如hornetq、apachekafka、redis),并拥有一个侦听器,这样您将立即收到有毒元组的通知。