【发布时间】:2013-05-09 08:47:00
【问题描述】:
风暴文档中提到,风暴重播处理已超时的元组。我的问题是,风暴是否自动执行此操作(无需在源喷口上调用 fail()),或者这是否是源喷口重播元组的责任(调用 fail() 并且重播应该在内部甚至外部某个地方实现)?
【问题讨论】:
标签: java apache-storm
风暴文档中提到,风暴重播处理已超时的元组。我的问题是,风暴是否自动执行此操作(无需在源喷口上调用 fail()),或者这是否是源喷口重播元组的责任(调用 fail() 并且重播应该在内部甚至外部某个地方实现)?
【问题讨论】:
标签: java apache-storm
为了在超时时进行适当的重播,当您从 spout 发出元组时,您必须使用 id 锚定元组。发生超时时,您用作锚点的任何内容都会返回到失败方法(fail(object anchorId))。现在您可以使用失败/超时元组的anchorId 来重播或您想要对超时元组执行的任何其他操作。每个锚 id 必须是唯一的。锚 id 的一个例子是数据库 id。当您的元组失败时,您可以使用数据库 ID 重新创建您的元组并重新发出它。因此,要回答您的问题,您必须在失败中包含重播逻辑,并且您可以使用 anchorId 重新创建您的元组。希望这些信息有帮助
【讨论】:
来自http://storm.apache.org/documentation/Guaranteeing-message-processing.html,
如果元组超时,Storm 将在
Spout上调用fail方法
所以是的,fail 将被调用。
【讨论】: