Мигать ровно один раз - контрольно-пропускной пункт и подтверждение барьера в раковине - PullRequest
0 голосов
/ 31 мая 2018

У меня есть задание Flink с приемником, который записывает данные в MongoDB.Приемник является реализацией RichSinkFunction.

Включена внешняя контрольная точка.Интервал составляет 5000 мельниц, и схема EXACTLY_ONCE.

  • Flink версия 1.3,
  • Kafka (исходная тема) 0.9.0

Я не могу перейти на TwoPhaseCommitSink в Flink 1.4.

У меня мало сомнений

  1. В какой момент времени приемник подтверждает барьер контрольной точки, в начале функции invoke или когда вызов завершен?Означает ли это, что он ожидает сохранения (сохранения в MongoDB) ответа перед подтверждением барьера?
  2. Если фиксация контрольной точки выполняется асинхронным потоком, как Flink может гарантировать ровно один раз в случае сбоя задания?Что если данные сохранены приемником в MongoDB, но контрольная точка не зафиксирована?Я думаю, что это приведет к дублированию данных при перезапуске.
  3. Когда я отменю задание с панели мониторинга Flink, завершит ли Flink потоки асинхронной контрольной точки для завершения или это вызов hard kill -9?

1 Ответ

0 голосов
/ 31 мая 2018

Прежде всего, Flink может гарантировать единовременную согласованность только в одном конце, если источники и приемники поддерживают это.Если вы используете потребитель Flink's Kafka, Flink может гарантировать, что внутреннее состояние приложения точно в один раз.Для достижения полной сквозной согласованности ровно один раз, приемник также должен должным образом поддерживать это.Вы должны проверить реализацию приемника MongoDB, если он работает правильно.

Барьеры контрольных точек отправляют регулярные сообщения по каналам передачи данных, т. Е. Барьер для контрольной точки n разделяет поток на записи, которые отправляютсяв контрольно-пропускной пункт n и n + 1.Оператор приемника будет обрабатывать барьер между двумя вызовами invoke() и запускать бэкэнд состояния для выполнения контрольной точки.Затем это зависит от состояния сервера, может ли и как он может выполнить контрольную точку асинхронно.Как только вызов для запуска контрольной точки возвращается, приемник может продолжить обработку.Оператор приемника сообщит JobManager о том, что он завершил контрольное указание своего состояния, как только он получит уведомление от бэкэнда состояния.Общая контрольная точка завершается, когда все операторы успешно сообщили, что они завершили свои контрольные точки.

В этом сообщении в блоге более подробно обсуждается сквозная обработка ровно один раз и требования к операторам приемника.

...