Flink: ошибка выполнения кластера потери Taskmanager
Я запускаю потоковую программу в реальном времени на Flink с 1 мастером и 2 работниками. Один рабочий работает на отдельной машине, а другой - на самой главной машине. Я использую JAR моей программы, в которой Parallelism
установлен на 2. Также я читаю данные из Кафки с 2 брокерами и 2 разделами.
В этом сценарии, когда я отправляю задание в кластер Flink, оно некоторое время запускается и завершается с ошибкой java.lang.Exception: The slot in which the task was executed has been released. Probably loss of TaskManager 82f8941ff339603995e37c453f8ff401
, Какова вероятная причина потери менеджера задач? (Только один диспетчер задач, который находится на главном компьютере, потерян, другой еще там и отображается в Flink Web Interface.)
2 ответа
Как сказал Улисс в своем ответе, вы можете увеличить время, используемое для сердцебиения, или использовать инкрементный сборщик мусора, такой как G1GC (образы док-станции Флинка уже используют этот сборщик мусора, если он доступен).
Чтобы включить G1GC, вы должны добавить следующий аргумент в команду java, которая запускает диспетчер задач вашего flink:
-XX:+UseG1GC
Вы можете найти больше информации об этом инкрементном сборщике мусора по следующим ссылкам:
Я тоже встречаюсь с проблемой. И я нахожу это.
Если вы видите исключение java.lang.Exception: слот, в котором выполнялась задача, был освобожден. Вероятно, потеря TaskManager, хотя TaskManager фактически не аварийно завершился, это означает, что TaskManager некоторое время не отвечал. Это может быть связано с сетевыми проблемами, но часто из-за длительных остановок сборки мусора. В этом случае быстрым решением было бы использование инкрементного сборщика мусора, такого как сборщик мусора G1. Обычно это приводит к более коротким паузам. Кроме того, вы можете выделить больше памяти пользовательскому коду, сократив объем памяти, которую Флинк захватывает для своих внутренних операций (см. Настройку управляемой памяти TaskManager). Если оба эти подхода терпят неудачу и ошибка сохраняется, просто увеличьте паузу пульса TaskManager на установка AKKA_WATCH_HEARTBEAT_PAUSE (akka.watch.heartbeat.pause) на большее значение (например, 600 с). Это заставит JobManager ожидать сердцебиение в течение более длительного промежутка времени, прежде чем считать TaskManager потерянным.
Решение предоставлено https://flink.apache.org/faq.html
Я надеюсь, что это может помочь вам.
Мы наблюдали эту ошибку, когда на узле, который используется для этого диспетчера задач, не хватало свободного места.
В настоящее время используется Flink 3.7.1, но были затронуты и более ранние версии.
Об этом сообщалось даже как об ошибке https://issues.apache.org/jira/browse/FLINK-5844, но было закрыто, потому что репортер не отвечал.