Apache Отказоустойчивость Flink - PullRequest
0 голосов
/ 01 февраля 2020

Apache Flink предлагает отказоустойчивый механизм для последовательного восстановления состояния приложений потоковой передачи данных. Механизм гарантирует, что даже при наличии сбоев состояние программы в конечном итоге будет отражать каждую запись из потока данных ровно один раз.

Мне нужно понять ответ по следующей ссылке: Flink Точно однократная обработка сообщений

Означает ли это, что Flink Sink выдаст дубликаты событий для внешней системы, такой как Cassandra?

Например:

1 - у меня есть следующий поток: источник -> flatMap с состоянием -> приемник и настроенным интервалом снимка как 20 секунд.

Что произойдет, если менеджер задач отключится (убит) между двумя снимками (через 10 секунд после последнего снимка и за 10 секунд до следующего снимка).

Что я знаю, так это то, что Flink перезапустит задание с последнего снимка.

В этом случае приемник обработает все записи, которые уже были обработаны между последним снимком и временем простоя?

1 Ответ

1 голос
/ 02 февраля 2020

В сценарии, который вы описали, приемник Flink действительно обработает записи, которые были ранее отправлены ему со времени последнего снимка.

Но это не обязательно означает, что внешнее хранилище данных (например, база данных, файловая система или очередь сообщений), подключенная к приемнику, в конечном итоге сохранит эти дубликаты. Flink может предоставить то, что мы иногда называем «сквозными» гарантиями, если приемник поддерживает транзакции или данные записываются идемпотентным способом.

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

Ситуация с Cassandra несколько сложнее - см. Документацию - и Flink может предоставить семантику только один раз, если вы используете идемпотентные запросы.

...