Свернуть ровно один раз семантика и потеря данных

У нас есть установка Flink с производителем Kafka, который в настоящее время использует семантику хотя бы один раз. Мы рассматриваем возможность перехода на семантику ровно один раз в отношении производителя Kafka, поскольку это принесет нам преимущества в будущем. Однако, учитывая документацию, похоже, что это может добавить очень возможный риск потери данных, которого у нас в настоящее время нет. Если у нас будет длительный простой из-за того, что Flink не может восстановить или брокеры Kafka не работают, транзакция Kafka может истечь, и данные будут потеряны.

Если время между сбоем приложения Flink и завершенным перезапуском ›превышает время ожидания транзакции Kafka, произойдет потеря данных (Kafka автоматически прервет транзакции, для которых превышено время ожидания).

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


person Yordan Pavlov    schedule 29.12.2020    source источник


Ответы (1)


Ваше понимание правильное.

FWIW: это относится только к незапланированным простоям. Когда вы обновляете свое приложение или когда хотите закрыть его на более длительный период, вы всегда должны использовать команду stop [1], которая зафиксирует все внешние транзакции при завершении работы.

[1] https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/cli.html#stopping-a-job-gracefully-creating-a-final-точкасохранения

person snntrable    schedule 30.12.2020