О функции Flink точно один раз - PullRequest
0 голосов
/ 30 января 2019

Я читаю документацию о функции однократного мигания здесь .И я не совсем понимаю некоторые из предложений:

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

Это говорит о том, что потеря данных происходит, если фиксация в конечном итоге не удалась.Я интерпретирую это как: фиксация может быть успешной, но она просто перестает работать при каждом перезапуске по определенной причине.В этом случае Flink может отказаться только от данных, принадлежащих этому коммиту.Таким образом, если потеря данных неприемлема, приложение должно быть перезапущено, пока фиксация не будет выполнена успешно?

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

Я тоже здесь не совсем следую.О чем это уведомление, которое не упомянуто выше?И означает ли указанный оператор оператор стока?Кроме того, насколько я понимаю, если фиксация прошла успешно, и только так называемое уведомление не сработало, не приведет ли это к дублированию данных после восстановления до предварительно зафиксированного состояния?

Пожалуйста, исправьте меня, если сам вопрос не являетсядействительный.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 03 февраля 2019

Сквозной сквозной механизм Flink основан на протоколе двухфазного принятия (2PC).Протокол используется для согласования того, что ни один, или все приемники вывода программы фиксируют внешнюю систему.

Когда задача приемника говорит " Я готов принять " (предварительная фиксация)), это дает гарантию, что он способен выполнить коммит.Затем задача приемника ожидает получения уведомления о фиксации от координатора, который отправляется только в том случае, если все задачи приемника согласились быть готовыми к принятию.Гарантия также должна действовать в случае сбоя приложения до получения уведомления.В этом случае задача приемника должна быть в состоянии восстановить открытую (еще не подтвержденную) транзакцию и выполнить ее при получении следующего уведомления.В случае множественных сбоев приемник должен продолжать попытки, пока фиксация не будет выполнена успешно.Однако транзакция должна быть выполнена только один раз, даже в случае одного (или более) сбоя.

Это то, что подразумевается под

После успешной предварительной фиксации, гарантия должна быть гарантированно в конечном итоге успешной

Если задача приемника невозможность в конечном итоге зафиксировать данные, которые он предварительно зафиксировал, данные будут потеряны.

...