2017-01-25 13 views
1

Я запускаю программу потокового воспроизведения в реальном времени на Flink с 1 мастером и 2 работниками. Один рабочий работает на отдельной машине, а другой работает на самой мастер-машине. Я использую JAR своей программы, в которой значение Parallelism равно 2. Также я читаю данные от Kafka с двумя брокерами и двумя разделами.Flink: Ошибка выполнения кластера потери Taskmanager

В этом случае, когда я отправляю задание в кластер Flink, он будет работать некоторое время и получить сбой с ошибкой java.lang.Exception: The slot in which the task was executed has been released. Probably loss of TaskManager 82f8941ff339603995e37c453f8ff401. Какова вероятная причина потери диспетчера задач? (Только один диспетчер задач, который находится на мастер-машине, потерян, еще один находится и отображается на веб-интерфейсе Flink.)

ответ

0

Я тоже встречаюсь с проблемой. И я нахожу это.

Если вы видите java.lang.Exception: слот, в котором выполнялась задача, был освобожден. Вероятно, потеря TaskManager, даже несмотря на то, что TaskManager действительно не сбой, это означает, что TaskManager не реагировал какое-то время. Это может быть связано с сетевыми проблемами, но часто связано с длинными сборщиками мусора. В этом случае быстрым решением было бы использовать инкрементный сборщик мусора, например сборщик мусора G1. Обычно это приводит к более коротким паузам. Кроме того, вы можете выделить больше памяти для кода пользователя, уменьшив объем памяти Flink grabs для своих внутренних операций (см. Конфигурацию управляемой памяти TaskManager). Если оба этих подхода терпят неудачу и ошибка сохраняется, просто увеличивайте паузу в пульте TaskManager установите AKKA_WATCH_HEARTBEAT_PAUSE (akka.watch.heartbeat.pause) на большее значение (например, 600 секунд). Это приведет к тому, что JobManager дождался биения в течение более длительного интервала времени, прежде чем рассматривать потерянный TaskManager.

Решение дается https://flink.apache.org/faq.html

Я надеюсь, что это может помочь вам.

1

Как ulysses сказал в своем Anwer, можно увеличить время, используемое для сердцебиения или использовать инкрементный сборщик мусора как G1GC (Докер изображения FLiNK уже используют этот сборщик мусора, если он доступен).

Чтобы включить G1GC вы добавить следующий аргумент команды Java, что launchs диспетчер задач вашего FLiNK в:

-XX:+UseG1GC

Вы можете найти более подробную информацию об этом инкрементного сборщика мусора в следующих ссылок: