【问题标题】:Does storm replay tuple which processing has timed out?风暴重播处理已超时的元组吗?
【发布时间】:2013-05-09 08:47:00
【问题描述】:

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

【问题讨论】:

    标签: java apache-storm


    【解决方案1】:

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

    【讨论】:

    • 有什么办法可以知道,Spout的fail()方法中哪个bolt失效了?基本上,我想在 ack() 或 fail() 时在元组中发送特定于螺栓的信息。如何做到这一点?
    【解决方案2】:

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

    如果元组超时,Storm 将在 Spout 上调用 fail 方法

    所以是的,fail 将被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多