Как я могу профилировать топологии Apache Storm без использования веб-панели?

Название в значительной степени говорит само за себя, у меня есть несколько топологий Storm, и я хотел бы измерить их задержки, то есть количество времени между сообщением, поступающим от Kafka, и последним битом связанного выполнения в финальном болте. Бонусные баллы, если я смогу углубиться в результаты, чтобы увидеть задержку по каждому болту.

Можно ли это сделать, просто изменив конфигурацию Storm?

Если нет, то http://storm.incubator.apache.org/apidocs/backtype/storm/hooks/info/SpoutAckInfo.html backtype.storm.hooks.info.SpoutAckInfo.completeLatencyMs то, что я ищу?


person teryret    schedule 30.07.2014    source источник


Ответы (1)


Для общего профилирования у нас есть форк storm, где я разрешаю супервизору динамически устанавливать и открывать порт JMX, равный на 1000 выше, чем порт воркера (конечно, это ограничивает количество воркеров, которые мы могли бы назначить, но мы никуда не денемся рядом с этой проблемой сейчас). Затем значением supervisor.childopts мы назначаем JMX-порт воркера и подключаемся к Visual VM.

В зависимости от вашего вопроса о метриках вы можете использовать BaseTaskHook, чтобы передать метрики шторма чему-то с помощью MBean (мы используем метрики codahale) и снова просмотреть значения через JMX. Я опубликовал пример суть. Обратите внимание, что мы не повысили показатели codahale до версии 3.x.

Я считаю, что с помощью инструментов Java 7 вы можете включить JMX на работающей JVM, поэтому, если вы используете Java 7+, это также поможет вам.

person danehammer    schedule 30.07.2014
comment
Звучит неплохо, но есть ли у вас более подробная информация о MetricsHook? Я не вижу этого имени нигде в документации Storm... - person teryret; 31.07.2014
comment
Прошу прощения, я неправильно вспомнил, как мы этого добились. Обновил ответ и опубликовал суть. - person danehammer; 01.08.2014
comment
Итак, по сути, вы выполняете кучу нулевых проверок значений задержки. Знаете ли вы, что означает нулевое значение в этом контексте? Я попробовал это, и почти все вызовы этого события имеют нулевую задержку, но я не понимаю, почему. Наверняка в системе есть некоторая задержка... - person teryret; 04.08.2014
comment
Может ли это быть связано с выборкой? По умолчанию он равен 5%, так что вы видите такое же количество раз, когда вы получаете нуль? - person danehammer; 09.08.2014
comment
Ах да, это так. Может ли кто-нибудь проголосовать за этот ответ и комментарий выше? У меня недостаточно представителей, чтобы проголосовать за этот аккаунт :-( - person teryret; 11.08.2014
comment
Можем ли мы использовать VisualVM или jProfiler? Как я могу узнать, какой метод занимает больше всего времени? - person anir; 31.10.2019