【问题标题】:ApacheStorm who calls Spout.nextTuple()?调用 Spout.nextTuple() 的 ApacheStorm?
【发布时间】:2018-02-10 09:45:28
【问题描述】:

我的问题是:谁在 Apache Storm 拓扑的 Spout 中专门调用了nextTuple() 方法

在某些消息来源中,Storm 本人会这样做,但这并不具体且不清楚。

Storm在什么情况下会导致这个方法?预定?

有没有什么方法可以影响这个过程,比如说放慢它?

【问题讨论】:

    标签: apache-storm apache-storm-topology


    【解决方案1】:

    这里称为https://github.com/apache/storm/blob/master/storm-client/src/jvm/org/apache/storm/executor/spout/SpoutExecutor.java#L158(Storm 2.0,对于 1.x,它是一些类似的 clojure 代码)。

    是的,Storm 调用 nextTuple。更准确地说,它是由 spout 执行器线程调用的。我链接的方法在循环中调用。如果已经达到 topology.max.spout.pending,Storm 会跳过调用 nextTuple。

    是的,当 nextTuple 没有发出任何东西时,您可以减慢调用 nextTuple 的频率,以避免在没有发出任何东西时浪费 CPU。请注意此处https://github.com/apache/storm/blob/master/storm-client/src/jvm/org/apache/storm/executor/spout/SpoutExecutor.java#L176 调用等待策略的行。等待策略是使用拓扑配置中的 topology.spout.wait.strategy 参数设置的。

    如果没有要发出的内容,默认等待策略会休眠 1 毫秒。您可以通过配置 topology.sleep.spout.wait.strategy.time.ms 来延长睡眠时间。不要将等待设置得太高,因为处理确认​​/失败发生在与 nextTuple 相同的线程中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多