Понимание Flink Savepoints & контрольных точек - PullRequest
0 голосов
/ 04 марта 2019

Рассматривая потоковое приложение Apache Flink с конвейером, подобным этому:

Kafka-Source -> flatMap 1 -> flatMap 2 -> flatMap 3 -> Kafka-Sink

, где каждая функция flatMap является оператором без сохранения состояния (например, обычная функция .flatMap для Datastream).

Как работают контрольные точки / точки сохранения, если входящее сообщение будет ожидаться на flatMap 3?Будет ли сообщение повторно обработано после перезапуска, начиная с flatMap 1, или оно перейдет к flatMap 3?

Я немного сбит с толку, потому что документация , по-видимому, ссылается на состояние приложения какЯ могу использовать операторы с состоянием, но в моем приложении нет операторов с состоянием.Сохраняется и восстанавливается ли «ход обработки» на всех , или же после сбоя / перезапуска весь конвейер будет повторно обрабатываться?

И в этом разница между сбоями (->flink восстанавливает с контрольной точки) и ручной перезапуск с использованием точек сохранения относительно моих предыдущих вопросов?

Я пытался выяснить сам (с включенной контрольной точкой, используя EXACTLY_ONCE и rockdb-backend), поместив Thread.sleep() в flatMap 3 изатем отмена задания с точкой сохранения.Однако это привело к зависанию инструмента командной строки flink до тех пор, пока не закончился sleep, и даже тогда flatMap 3 было выполнено и даже отправлено в приемник до задание полученоотменен.Поэтому кажется, что я не могу вручную заставить эту ситуацию анализировать поведение flink.

В случае, если «ход обработки» не сохраняется / не покрывается контрольными точками / точками сохранения, как я описал выше, как я могу убедиться в каждом сообщениидоходит до моего конвейера, что любой данный оператор (flatmap 1/2/3) никогда не обрабатывается повторно в ситуации перезапуска / сбоя?

1 Ответ

0 голосов
/ 04 марта 2019

Когда берется контрольная точка, каждая задача (параллельный экземпляр оператора) проверяет свое состояние.В вашем примере три оператора плоской карты не имеют состояния, поэтому нет состояния для контрольной точки.Источник Kafka с состоянием и контрольными точками смещает чтение для всех разделов.

В случае сбоя задание восстанавливается, и все задачи загружают свое состояние, что в случае оператора источника означает, что смещения чтения сбрасываются.Следовательно, приложение будет повторно обрабатывать все события, начиная с последней контрольной точки.

Для достижения сквозного соединения ровно один раз, вам нужен специальный соединитель приемника, который предлагает либо поддержку транзакций (например, для Kafka), либоподдерживает идемпотентную запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...