谁调用spout.nexttuple()?

a9wyjsp7  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(242)

我的问题是:谁专门打电话 nextTuple() apachestorm拓扑的喷口中的方法?
在一些资料中,有人写道,风暴自己会这样做,但这不是具体和不清楚。
暴风雪在什么情况下导致这种方法?预定的?
有没有办法影响这个过程,比如说,放慢它的速度?

kcwpcxri

kcwpcxri1#

它叫这里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代码,可以做类似的事情)。
是的,风暴下一次呼叫。更确切地说,它是由喷口执行器线程调用的。我链接的方法在循环中调用。如果已到达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来延长睡眠时间。不要将等待设置得太高,因为处理acks/fails与nexttuple发生在同一个线程中。

相关问题