风暴重播元组哪个处理已超时?

时间:2013-05-09 08:47:01

标签: java apache-storm

在风暴文档中提到,风暴重放了哪些处理超时的元组。我的问题是风暴是否自动执行此操作(不调用原点spout上的fail())或者是原始spout的重要责任是重放元组(调用fail()并且重放应该在内部实现,甚至在外部实现)?

2 个答案:

答案 0 :(得分:6)

为了在超时时进行适当的重放,必须在从spout发出元组时使用id锚定元组。发生超时时,无论您用作锚点的是什么,都会返回到fail方法(fail(object anchorId))。现在,您可以使用失败/超时元组的anchorId来重放或者您想要对超时元组执行的任何其他操作。每个锚ID必须是唯一的。锚id的示例是数据库id。当元组失败时,您可以使用数据库ID重新创建元组并重新发出它。因此,要回答您的问题,您必须在失败中使用重播逻辑,并且可以使用anchorId重新创建元组。希望这些信息有帮助

答案 1 :(得分:4)

来自http://storm.apache.org/documentation/Guaranteeing-message-processing.html

  

如果元组超时Storm会调用fail上的Spout方法

是的,fail将被调用。