Flink не перенаправляет метрики Kafka, когда параллелизм больше 1

#apache-kafka #apache-flink

#apache-kafka #apache-flink

Вопрос:

У меня есть задание Flink, которое считывает данные из Kafka (версия 0.9) и записывает в Redis. Я хочу отслеживать records-consumed-rate и records-lag-max метрики, передаваемые Kafka, которые Flink должен иметь возможность пересылать. В этом случае я пересылаю в Datadog.

Когда я запускаю задание с параллелизмом, равным 1, я вижу, что эта метрика генерируется просто отлично. Однако, если я сделаю параллелизм больше 1, эта метрика больше не пересылается. Задание выполняется при параллелизме> 1, потому что я вижу записи, записываемые в Redis.

Я запускаю Flink (v1.6.2) на AWS EMR:

  • главный узел: (1) m4.large
  • основной узел: (1) c4.2xlarge
  • num.task.managers: 1
  • slots.per.task.manager: 7
  • параллелизм: 7

Параллелизм устанавливается StreamExecutionEnvironment.setParallelism() . Каждый потребитель Kafka создается с тем же group.id и уникальный client.id .

Агент DD отлично работает в кластере. Генерируется много метрик, таких как numberOfCompletedCheckpoints и время безотказной работы и т. Д.

Есть ли какая-либо причина, по которой Flink не будет пересылать эти метрики из Kafka, если параллелизм больше 1?

Обновление: я также попытался отправить пользовательскую метрику DD ( counter.inc() ) из функции Redis RichSinkFunction. Когда параллелизм = 1, метрика отправляется нормально. Когда параллелизм = 7, метрика не отправляется, однако она вызывается (добавлена строка отладки). Таким образом, кажется, что это не ограничивается пересылаемыми метриками из Kafka.

Комментарии:

1. Не уверен, как работает DataDog, поскольку я никогда им не пользовался, но когда вы устанавливаете параллелизм> 1, Flink отправляет отдельные метрики для каждого из TaskManagers, участвующих в обработке, так что, возможно, это проблема в вашем случае? Я использую Flink с Prometheus, и проблем с параллелизмом> 1 не было.

Ответ №1:

Проблема заключалась в том, что размер HttpRequest был слишком большим, чем выше параллелизм, что имеет смысл. Я возвращал «Объект запроса слишком большой», однако исключение не выходило из системы правильно, поэтому я пропустил его.

Похоже, что Flink DatadogHttpReporter не учитывает размер запроса при его создании. Я изменил Reporter, чтобы ограничить количество метрик на запрос 1000. Теперь метрики отображаются просто отлично.