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