我一直在尝试为我当前的项目记录所有Storm指标的含义。
在这个过程中,我收集了这个组的响应以及github的数据。
虽然有些指标是不言自明的,但我对一些螺栓指标真的很困惑。
例如,进程延迟和执行延迟之间的区别是什么?
从这个谷歌小组的帖子中,我收集了以下信息:
-
列表项处理延迟=调用ack时的时间戳-传递execute时的时间戳元组
-
列表项执行延迟=执行函数结束时的时间戳-执行传递元组时的时间戳(来源:http://goo.gl/3KRAl)
和
- 列表项进程延迟是元组被打包之前的时间,执行延迟是元组在执行中花费的时间(来源:http://goo.gl/m0fTC)
根据我在storm UI中看到的,我的执行延迟几乎总是大于进程延迟。这怎么可能呢?谁能告诉我这两种延迟的确切定义?
提前感谢!
Ack在执行器的执行函数中被调用,或者简而言之在一个螺栓的执行方法结束之前被调用。因此,执行延迟更大。下面的代码片段将使事情变得更清楚(从这里原样取出):
public void execute(Tuple tuple) {
String sentence = tuple.getString(0);
for(String word: sentence.split(" ")) {
_collector.emit(tuple, new Values(word));
}
_collector.ack(tuple);
}
根据您的定义,Execute latency应该总是大于Process latency,因为正如Abhijeet也提到的,ack是在Execute方法内部调用的。
如果您注意到主要的差异,那么您可能在打包元组之后有一些代码。