1

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

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

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

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

4

1 回答 1

3

它在这里被称为https://github.com/apache/storm/blob/master/storm-client/src/jvm/org/apache/storm/executor/spout/SpoutExecutor.java#L158 (Storm 2.0, for 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 相同的线程中。

于 2018-02-10T13:07:39.127 回答