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