Flink

Junior

Как читать экспорт метрик Flink, и какие цифры реально важны?

Большая часть того, что возвращает API метрик Flink — шум для первого прохода. Короткий список счётчиков отвечает почти на любой вопрос «всё ли в порядке с задачей».

Читать на:
busyTimeMsPerSecond numRecordsInPerSecond длительность checkpoint
Метрики с наибольшей информативностью для первичной проверки здоровья — иллюстративно, не измерено.

Flink отдаёт метрики через REST API (или JMX, или любой репортер на выбор) в виде плоского JSON: одна запись на имя метрики на таск/оператор/задачу, без встроенной приоритизации того, что важно.

Форма экспорта метрик

Запрос к /jobs/<id>/vertices/<vertex-id>/metrics возвращает массив объектов {"id": "...", "value": "..."} — плоский, без вложенности и без указания, какие из них стоит смотреть в первую очередь. Это нужно знать заранее самому, поскольку сам API считает счётчик пауз GC и реальный счётчик пропускной способности одинаково важными.

Небольшой набор, важный для первого прохода

busyTimeMsPerSecond — сколько времени в каждой секунде таск реально занимался работой, ближайший аналог метрики утилизации во Flink. numRecordsInPerSecond / numRecordsOutPerSecond — реальная пропускная способность, а растущий разрыв между «in» и «out» по всему пайплайну — формирующийся бэклог. Длительность checkpoint (из REST-эндпоинта чекпоинтинга, а не из метрик по тасков) — медленная или растущая длительность checkpoint часто становится самым ранним сигналом проблемы, задолго до того, как заметно упадёт throughput.

Что технически доступно, но обычно шум

Метрики JVM heap и GC реальны и иногда действительно являются ответом, но это инструмент второго прохода — проверяйте их, когда busyTimeMsPerSecond или длительность checkpoint уже что-то сказали, а не как первый шаг. Начинать с них при каждом расследовании означает перебирать десятки счётчиков JVM, прежде чем добраться до тех двух-трёх, что обычно и объясняют происходящее.

По той же причине правила Flink в opti-pipe смотрят только на короткий фиксированный список метрик — не потому что в экспорте больше ничего нет, а потому что больше не значит полезнее для ответа на вопрос «всё ли в порядке с задачей».

Посмотрите, как это выглядит на вашем собственном пайплайне.

Загрузите реальный event log Spark, run_results.json от dbt или экспорт метрик Flink — и получите конкретные рекомендации, которые нужно одобрить, а не ещё одно эмпирическое правило.