storm - 处理bolt.execute中的异常

时间:2015-05-27 14:33:39

标签: cassandra apache-storm

我正在使用storm来处理其中一个螺栓写入 cassandra 的流。 cassandra calculation1()命令可以抛出一个异常,我想知道如何将其捕获到“失败”状态。元组因此重试。

IRichBolt 的文档不会show它抛出任何东西,所以我想知道如何处理异常情况。

主要问题:我应该在try / catch中包装cassandra调用还是风暴来管理这个案例?

1 个答案:

答案 0 :(得分:3)

分段答案:

1)用try-catch块绝对包围你的代码。

2)如何处理故障取决于Storm拓扑和故障类型:

如果异常表明立即重试可能有效,那么你可以循环一些小的有限次数,直到尝试运行或你的尝试用完为止。

如果您执行的元组是由喷口发出的元组,那么您的螺栓可能会使元组失败。这将迫使Storm重试(也就是说将调用spout上的fail()方法并且您可以编写重试代码)

如果由于处理此元组而导致至少有一个副作用,并且您不想重复该元组重复该副作用,那么您需要获得一个更有创意。你的Cassandra bolt可以将失败的元组发送到一个失败的元组流,在那里它可以被保存在某个地方(HBase,文件系统,Kafka),直到你准备再试一次。要再次尝试,您可以向拓扑中添加另一个Spout,该拓扑从该失败元组的存储中读取,并在流上将它们发送回Cassandra bolt以进行重试。这为您提供了一种在重试之间延长循环重试的方法。如果与失败的元组一起,您还会持久保存/记录Cassandra异常,您可以浏览/监视日志以查看管理员是否应该知道任何问题。