13

我一直在尝试为我当前的项目记录所有 Storm 指标的含义。

在这个过程中,我从这个小组的回复以及 github 中收集了数据。

虽然有些指标很容易解释,但我对一些螺栓指标感到非常困惑。

例如,进程延迟和执行延迟有什么区别?

从这个谷歌组的帖子中,我收集了以下信息:

  • 列表项处理延迟 = 调用 ack 时的时间戳 - 传递执行时的时间戳 tuple

  • 列表项执行延迟 = 执行函数结束时的时间戳 - 传递元组时的时间戳(来源:http: //goo.gl/3KRAl

  • 列表项进程延迟是元组被确认之前的时间,执行延迟是执行元组所花费的时间(来源:http: //goo.gl/m0fTC

根据我在 Storm UI 中看到的情况,我的执行延迟几乎总是大于进程延迟。怎么可能?谁能帮我准确定义这两种延迟?

提前致谢!

4

2 回答 2

5

Ack 在 executor 的 execute 函数中被调用,或者简而言之,会在一个 bolt 的 execute 方法结束之前被调用。因此,执行延迟更多。这个片段会让事情变得清晰(从这里获取):

public void execute(Tuple tuple) {
  String sentence = tuple.getString(0);
  for(String word: sentence.split(" ")) {
    _collector.emit(tuple, new Values(word));
  }
  _collector.ack(tuple);
}

我希望这有帮助。

于 2013-11-24T22:57:36.150 回答
0

根据您的定义,执行延迟应始终大于进程延迟,因为 ack 在执行方法中被调用,正如 Abhijeet 也提到的那样。

如果你注意到一个主要的区别,那么你可能在确认一个元组之后有一些代码。

于 2014-04-04T09:12:04.287 回答