Storm UI: разница между Execute и Process Latencies
Я пытался документировать значение всех показателей Storm для моего текущего проекта.
Во время этого процесса я собрал данные из этих групповых ответов, а также github.
В то время как некоторые из показателей довольно понятны, я действительно запутался в некоторых показателях болтов.
Например, в чем разница между задержкой процесса и задержкой выполнения?
Из сообщений в этой группе Google я собрал следующую информацию:
-
Задержка обработки списка элементов = отметка времени при вызове ack - отметка времени при выполнении передается кортеж
-
Элемент списка выполняет latency = timestamp при завершении функции выполнения - отметка времени при передаче переданного кортежа (источник: http://goo.gl/3KRAl)
и
- Элемент списка Задержка процесса - это время до тех пор, пока не будет добавлен кортеж, выполнение задержки будет потрачено на выполнение для кортежа (источник: http://goo.gl/m0fTC)
Основываясь на том, что я вижу в моем личном интерфейсе, мой Execute Latency почти всегда больше, чем задержка процесса. Как это могло быть?
Может ли кто-нибудь помочь мне с точным определением обеих задержек?
Спасибо заранее!
Ответы
Ответ 1
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);
}
Надеюсь, это поможет.
Ответ 2
В соответствии с вашим определением задержка Execute всегда должна быть больше, чем задержка процесса, поскольку ack вызывается внутри метода execute, как упоминал Abhijeet.
Если вы заметили существенную разницу, то, вероятно, у вас есть код после того, как вы подберете кортеж.