5

在风暴文档中提到,风暴重播处理已超时的元组。我的问题是,风暴是否自动执行此操作(无需在源喷口上调用 fail()),或者这是否是源喷口重播元组的责任(调用 fail() 并且重播应该在内部甚至外部某个地方实现)?

4

2 回答 2

6

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

于 2013-05-13T00:04:23.853 回答
4

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

如果元组超时,Storm 将fail调用Spout

所以是的,fail将被调用。

于 2013-05-10T12:56:34.980 回答