Apache Flink - как при запуске пропустить все окна, кроме самых последних - PullRequest
0 голосов
/ 05 июня 2019

В Flink у меня есть работа с потоком ключей (например, 10 событий для каждого ключа в среднем в день). Они обрабатываются как скользящие окна в зависимости от времени события (например, размер окна 90 дней и слайд окна 1 день). События потребляются из Kafka, который сохраняет всю историю событий (например, последние 3 года).

Иногда я хотел бы перезапустить Flink: для обслуживания, обработки ошибок и т. Д. Или запустите свежий экземпляр Flink с Kafka, уже содержащим историю событий.

В таком случае я хотел бы пропустить запуск для всех, кроме самого последнего окна для каждого Ключа. (Это характерно для моего варианта использования: каждое окно при обработке эффективно переопределяет результаты обработки предыдущих окон. Поэтому при запуске я хотел бы обрабатывать только одно самое последнее окно для каждого ключа.)

Возможно ли это во Флинке? Если так, то как это сделать?

1 Ответ

1 голос
/ 05 июня 2019

Вы можете использовать

FlinkKafkaConsumer<T> myConsumer = new FlinkKafkaConsumer<>(...);
myConsumer.setStartFromTimestamp(...); // start from specified epoch timestamp (milliseconds)

, который описан вместе с другими соответствующими функциями в разделе документов по Конфигурация начальной позиции потребителей Kafka .

Или вы можете использовать точку сохранения , чтобы выполнить чистое обновление / повторное развертывание без потери смещения kafka и связанного содержимого окна.

...