【问题标题】:Can we write conditional bolts in storm?我们可以在storm中编写条件螺栓吗?
【发布时间】:2016-02-19 23:42:49
【问题描述】:

我只是想知道我们是否可以在storm中编写条件螺栓。 如果我有三个螺栓,第一个螺栓将完成它的工作,第二个将检查天气螺栓 1 执行是否完成,如果正确完成,那么只有第三个螺栓应该开始工作。我们可以尝试这个,如果是,请告诉我如何如果没有,说为什么?

【问题讨论】:

  • 我不明白你的问题。在 Storm 中,一个拓扑的所有算子一次部署并同时运行……你想完成什么?你是什​​么意思“见鬼的天气螺栓 1 执行完成与否”?
  • “检查 Bolt 1 的执行是否完成”在某种意义上,每个 Bolt 都有单独的工作。它们不是相互关联的(不是这样将 Bolt 1 的输出字段发送到 Bolt2)。唯一需要做的就是螺栓一个接一个地工作。就像条件一样。如果螺栓 1 完成工作,那么螺栓 2 必须开始工作。@ Matthias J. Sax
  • Storm 不支持这个。而且我对您尝试完成的工作感到困惑... Storm 遵循 数据驱动 工作流程方法,您似乎想要完成其他工作。也许 Storm 不是用于此目的的正确系统。
  • 好的!其他blot2可以知道blot1的ack吗?
  • 没有。这是不可能的。 Bolts 只能通过流“通信”。

标签: apache-storm


【解决方案1】:

不能通过使用不同的流 id 将螺栓链接在一起并在完成后从一个螺栓向另一个螺栓发射到该流 id 来完成您尝试做的事情吗?

例如 Bolt 1 从它接收它的任何地方接收它的数据。 Bolt 2 也从它接收数据的任何地方接收数据,但不开始工作。 Bolt 1 完成工作并向 Bolt 2 发出一个表示“完成”的元组。 Bolt 2 看到这个元组并开始工作。

您可以使用以下方法区分螺栓中的不同流:

tuple.getSourceStreamId()

返回一个带有这个元组的流 id 名称的字符串。

【讨论】:

    猜你喜欢
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多