Остановить задание вместо повторной попытки для определенных исключений в Apache Flink

#apache-flink

#apache-flink

Вопрос:

Я использую стратегию перезапуска по умолчанию для своих заданий, и она отлично работает в случае проблем, которые, возможно, могут быть решены через некоторое время (нет сети, не хватает памяти, Кафка недоступна и т.д.) Однако есть некоторые исключения, которые обычно означают ошибку в коде (например, исключение NullPointerException или любое другое необработанное), и в таких случаях я не хочу применять какую-либо стратегию перезапуска, поскольку любое количество перезапусков не решит проблему.

Есть ли какой-либо способ остановить задание изнутри задания в таких случаях, несмотря на настроенную стратегию?

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

1. На данный момент это не поддерживается…

Ответ №1:

Я думаю, что Flink в настоящее время не поддерживает то, чего вы пытаетесь достичь. Но одним из возможных решений является изменение этого.

  1. Установите стратегию перезапуска на no retry .
  2. перехватите исключение, которое, по вашему мнению, будет разрешено через некоторое время (например, сбой сети), и повторите попытку на месте
  3. для других случаев сбоя выполните команду throw, чтобы остановить задание

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

1. Хорошо, я также рассмотрел то, что вы предлагаете, но я думаю, что для OutOfMemoryError (или других серьезных проблем с сетью или диском) я бы предпочел выполнить внешний перезапуск, чем мой собственный код, перехватывающий и делающий что-то с ними.

2. верно. для нашей рабочей нагрузки и варианта использования мы выбрали сбой при любом необработанном исключении. Мы приложили немало усилий для автоматизации процесса перезапуска для Flink, чтобы сделать это менее болезненным

3. Как автоматизировать перезапуск Flink? Какие скрипты у вас есть? Какие API они используют?

4. хорошие вопросы. для перезапуска вам нужна информация о самой последней контрольной точке или точке сохранения (для серверной части RocksDB вы можете возобновить работу с контрольной точки). Автоматизация, которую я написал, выполняется с помощью Fabric fink management command S3 CLI.