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