Мы уже писали о важности отслеживания системных метрик приложений Apache Flink и RocksDB, используемой этим фреймворком для хранения состояния stateful-заданий. Сегодня рассмотрим, как отследить потребление ресурсов ЦП средствами встроенной визуализации Flame Graphs.
Что такое Flame Graph и зачем это нужно?
Помимо мониторинга длительности выполнения задач и заданий, дата-инженерам и разработчикам распределенных Flink-приложений также полезно знать о потреблении ресурсов ЦП и оперативной памяти. В Apache Flink версии 1.17 это можно наглядно увидеть с помощью Flame Graph – интерактивной SVG-визуализации, которая детализирована до уровня задач.
Flame Graph – это визуализация иерархических данных трассировки стека профилированного ПО, которая была разработана инженером Netflix Бренданом Греггом для решения проблем с производительностью MySQL. Чтобы быстро и подробно понять потребление ресурсов ЦП вместо изучения большого количества текстовой информации, генерируемой обычными средствами профилирования и трассировки ПО, Брендан Грегг проследил вызовы функций ЦП и визуализировал их. Получившиеся графики были похожи на пламя с отслеживанием времени по оси Х. Чтобы снизить накладные расходы на трассировку функций, Брендан сделал выборку (профилирование) синхронизированным и изменил порядок выборки, чтобы максимизировать слияние кадров. Для повышения наглядности потребления ресурсов ЦП Брендан решил использовать только теплые цвета, чтобы показать занятость CPU.
Flame-график сортирует и агрегирует трассировки на каждом уровне стека, чтобы их количество отражало процент от общего времени, затраченного ЦП в этой части кода. По оси X отображается заполнение профиля стека, отсортированное в алфавитном порядке, а по оси Y показана глубина стека, считая снизу от нуля. Каждый прямоугольник представляет кадр стека. Чем шире рамка, тем чаще она встречается на графике. Flame-графики строятся путем многократной выборки трассировки стека. Каждый вызов метода представлен полосой, длина которой пропорциональна тому, сколько раз она присутствует в выборке. Верхний край показывает, что находится на ЦП, а под ним — его происхождение. Flame-графики представляют как статическую, так и динамическую (интерактивную) визуализацию.
Использование Flame-графиков в Apache Flink
В Apache Flink эти графики позволяют ответить на следующие вопросы:
- Какие методы в настоящее время потребляют ресурсы ЦП?
- Как потребление одним методом по сравнению с другими?
- Какая серия вызовов в стеке привела к выполнению определенного метода?
Flame-графики поддерживаются в Apache Flink, начиная с версии 1.13. Чтобы создать эту визуализацию, надо в веб-GUI приложения Apache Flink перейти к графу выполняемого задания, выбрать интересующий оператор и в меню выбрать соответствующую вкладку.
При этом стоит помнить, что любой процесс измерения сам по себе неизбежно влияет на предмет измерения. Чтобы предотвратить непреднамеренное воздействие на производственную среду, Flame Graphs в Apache Flink доступны в качестве дополнительной функции. Чтобы включить ее, нужно установить параметр rest.flamegraph.enabled в значение true в конфигурационном файле conf/flink-conf.yaml. Это желательно делать в средах разработки, тестирования и предварительной эксплуатации, но не в производственном развертывании.
Помимо Flame-графиков ЦП, можно посмотреть и визуализацию вне ЦП, а также включить смешанный режим. Off-CPU Flame Graph визуализирует блокирующие вызовы, обнаруженные в выборках. Состояние потоков отслеживается следующим образом:
- On-CPU: Thread.State в [RUNNABLE, NEW]
- Off-CPU: Thread.State в [TIMED_WAITING, WAITING, BLOCKED]
Сбор трассировки стека выполняется исключительно внутри JVM, поэтому видны только вызовы методов в среде выполнения Java без системных вызовов. По умолчанию построение Flame Graph выполняется на уровне отдельного оператора, т. е. все потоки задач этого оператора отбираются параллельно, а их трассировки стека объединяются. Если вызов метода потребляет 100% ресурсов в одной из параллельных задач, но не потребляет в других, узкое место может быть скрыто за счет усреднения.
Как уже было отмечено выше, начиная с версии 1.17, Flame Graph в Apache Flink обеспечивает визуализацию до уровня задач и подзадач. Это удобно при тестировании и отладке распределенных Flink-приложений в высоконагруженных системах аналитики больших данных.
О других профилировщиках Flink-приложений читайте в нашей новой статье.
Потоковая обработка данных с помощью Apache Flink
Код курса
FLINK
Ближайшая дата курса
2 декабря, 2024
Продолжительность
16 ак.часов
Стоимость обучения
48 000 руб.
Узнайте больше про применение Apache Flink для потоковой обработки событий в распределенных приложениях аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники