Storm UI:执行和进程延迟之间的差异



我一直在尝试为我当前的项目记录所有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方法内部调用的。

如果您注意到主要的差异,那么您可能在打包元组之后有一些代码。

最新更新