Ваши предположения неверны.
(1) Контрольная точка никак не зависит от событий или результатов, достигающих приемника (ей).
(2) Flink самостоятельно управляет смещением Kafka. При восстановлении из контрольной точки, после сбоя, используются смещения в контрольной точке, а не те, которые могли быть переданы обратно в Kafka.
(3) Ни один из операторов никогда не бездействует, как вы описали , Контрольная точка не останавливает конвейер.
Лучший способ понять, как работает контрольная точка, - это go через игровую площадку Flink, особенно раздел Наблюдение за отказом и восстановлением . Это даст вам более четкое понимание этой темы c, потому что вы сможете точно наблюдать за происходящим.
Я также могу порекомендовать прочитать https://training.ververica.com/snapshots.html и следовать ссылки, содержащиеся там.
Но чтобы узнать, как работает контрольная точка в вашем приложении, вот основные шаги c:
(1) Когда координатор контрольной точки (часть менеджера заданий) ) решает, что пришло время инициировать другую контрольную точку, он информирует каждого менеджера задач о запуске контрольной точки n .
(2) Все исходные экземпляры контрольной точки имеют свое собственное состояние и вставляют барьер контрольной точки n в свои исходящие потоки. В вашем случае источники являются потребителями Kafka, и они проверяют текущее смещение для каждого раздела.
(3) Всякий раз, когда барьер контрольных точек достигает заголовка входной очереди в операторе с состоянием, этот оператор проверяет свое состояние и продвигает барьер. Эта часть имеет некоторую сложность, но в основном состояние хранится в многоверсионной карте ha sh, управляемой параллелизмом. Оператор создает новую версию n + 1 состояния, которое может быть изменено событиями за барьером контрольной точки, и создает новый поток для асинхронного снимка всего состояния в версии n .
В вашем случае окно и раковина находятся в состоянии. Состояние окна включает текущее содержимое окна, состояние триггера и другое состояние, которое вы используете для обработки окна, если оно есть.
(4) Мойки используют прибытие барьера для гриппа sh любого вывода в очереди и фиксируют ожидающие транзакции. Опять же, здесь есть некоторая сложность, так как транзакционные приемники используют протокол двухфазной фиксации.
В вашем приложении, если интервал контрольных точек намного меньше продолжительности окна, то приемник завершит множество контрольных точек, прежде чем когда-либо получит какие-либо выходные данные из окна.
(5) Когда контрольная точка от каждой задачи координатор получал ответ, что контрольная точка завершена, он завершает метаданные контрольной точки.
Во время восстановления состояние каждого оператора сбрасывается до состояния в самой последней контрольной точке. Это означает, что источники перематываются на смещения в контрольной точке, и обработка возобновляется с состоянием в окне и приемнике, соответствующим тому, что должно быть после использования событий до этих смещений.
Примечание: Для оставьте это достаточно простым, я замял некоторые детали. Кроме того, FLIP-76 представит новый подход к контрольным точкам.