默认情况下,当Storm spout 或 bolt 遇到异常时,它会重新启动 spout 或 bolt 并再次尝试。是否有任何配置选项可以使其停止拓扑,也许在 N 次重复尝试之后?(例如,Hadoop 在放弃之前尝试了 4 次。)
我有一个 Storm 拓扑运行了 77 天,其中一个螺栓在每个元组上引发了一个异常。在这种情况下,我宁愿它失败,以便我注意到有问题。
默认情况下,当Storm spout 或 bolt 遇到异常时,它会重新启动 spout 或 bolt 并再次尝试。是否有任何配置选项可以使其停止拓扑,也许在 N 次重复尝试之后?(例如,Hadoop 在放弃之前尝试了 4 次。)
我有一个 Storm 拓扑运行了 77 天,其中一个螺栓在每个元组上引发了一个异常。在这种情况下,我宁愿它失败,以便我注意到有问题。
没有停止拓扑的选项(当前)。老实说,仅仅因为一个例外而杀死整个拓扑是蛮力恕我直言。
在您的场景中,应在应用程序层处理这些异常。
是否有任何配置选项可以使其停止拓扑,也许在 N 次重复尝试之后?
没有现成的解决方案,但您可以这样做并跟踪 Spout 中重试的元组。如果达到阈值,则记录元组或将其发送到消息队列。
我有一个 Storm 拓扑运行了 77 天,其中一个螺栓在每个元组上引发了一个异常。
那么您的螺栓代码中可能存在错误?
一种策略是将失败的元组发送到按摩队列或事件总线(例如 HornetQ、Apache Kafka、Redis)并设置一个侦听器,以便您立即收到有关有毒元组的通知。
据我所见,Storm 不会重试元组(它本身会导致异常)。默认情况下,它会继续处理下一个元组。除非 Spout 实现了失败方法,否则不会重试相同的元组。