#apache-flink
#apache-flink
Вопрос:
У меня есть задание, в котором есть операторы с отслеживанием состояния, а также включена контрольная точка. Одна из задач оператора staful по какой-либо причине завершается с ошибкой и должна быть перезапущена и восстановить контрольное состояние.
Я бы спросил, какое из следующих действий является поведением при перезапуске:
- перезапускается и восстанавливается только сбойная задача
- все задачи оператора (содержащие неудачную задачу) перезапускаются и восстанавливаются
- все задание перезапускается и восстанавливается
Ответ №1:
Перезапускается ли все задание при сбое одной задачи?
tldr: для потоковых заданий ответ обычно «да», но не обязательно.
Восстановление потокового задания Flink включает в себя перемотку источников на смещения, записанные в контрольной точке, и сброс состояния обратно к тому, что было после использования только данных до этих смещений.
Перезапуск только сбойной задачи приведет к несоответствиям и сделает невозможным предоставление семантики «ровно один раз», если только сбойная задача не зависела ни от каких вышестоящих задач, и от нее не зависели никакие нижестоящие задачи.
Что может сделать Flink, так это восстановить состояние и перезапустить обработку на основе областей отработки отказа, которые учитывают эти зависимости в графе заданий. В случае потокового задания, только если задание смущающе параллельное, можно выполнить меньше, чем восстановление и перезапуск всего задания. Таким образом, в случае смущающе параллельного задания восстанавливается и перезапускается только сбойная область (которая включает в себя все ее подзадачи от источника до приемника), в то время как другие регионы продолжают работать.
Этот подход используется, если jobmanager.execution.failover-strategy
установлено значение region
, которое было по умолчанию с Flink 1.10.
Чтобы узнать больше об этом, см. FLIP-1: детальное восстановление после сбоев задачи и объявление о выпуске Apache Flink 1.9.0, в котором была представлена эта функция.
Комментарии:
1. спасибо @david-anderson за четкий ответ1