2

默认情况下,当Storm spout 或 bolt 遇到异常时,它会重新启动 spout 或 bolt 并再次尝试。是否有任何配置选项可以使其停止拓扑,也许在 N 次重复尝试之后?(例如,Hadoop 在放弃之前尝试了 4 次。)

我有一个 Storm 拓扑运行了 77 天,其中一个螺栓在每个元组上引发了一个异常。在这种情况下,我宁愿它失败,以便我注意到有问题。

4

2 回答 2

2

没有停止拓扑的选项(当前)。老实说,仅仅因为一个例外而杀死整个拓扑是蛮力恕我直言。

在您的场景中,应在应用程序层处理这些异常。

是否有任何配置选项可以使其停止拓扑,也许在 N 次重复尝试之后?

没有现成的解决方案,但您可以这样做并跟踪 Spout 中重试的元组。如果达到阈值,则记录元组或将其发送到消息队列。

我有一个 Storm 拓扑运行了 77 天,其中一个螺栓在每个元组上引发了一个异常。

那么您的螺栓代码中可能存在错误?

一种策略是将失败的元组发送到按摩队列或事件总线(例如 HornetQ、Apache Kafka、Redis)并设置一个侦听器,以便您立即收到有关有毒元组的通知。

于 2014-03-27T10:13:14.363 回答
0

据我所见,Storm 不会重试元组(它本身会导致异常)。默认情况下,它会继续处理下一个元组。除非 Spout 实现了失败方法,否则不会重试相同的元组。

于 2014-10-16T09:27:38.683 回答