В настоящее время я работаю над потоковой программой, которая объединяет данные из нескольких сообщений (8), для агрегации требуются все 8 сообщений, поэтому я использую окно счетчика. Все 8 сообщений имеют один и тот же уникальный ключ. Однако нет никакой гарантии, что все 8 сообщений прибудут. Итак, мой вопрос в два раза:Есть ли способ определить окно счета Flink, которое выдает все сообщения по истечении заданного времени, если счет не достигнут?
Первое, что происходит с окном подсчета Flink, которое никогда не закрывается? Я предполагаю, что окна просто накапливают сверхурочные, потребляя все больше и больше баранов.
Во-вторых, могу ли я закрыть окно счетчика, если оно не получит все его сообщения в течение заданного времени? Я ищу решение, которое как можно больше в реальном времени, я уже пробовал использовать временное окно, однако время пролета сообщений варьируется от нескольких миллисекунд до 40 секунд.
По существу, есть способ определить окно, которое запускает 8 сообщений, и выдает все сообщения из окна по истечении заданного времени (в этом случае через 60 секунд)?
Похоже, что в этом примере есть некоторые ошибки, например, для кода «ctx.timerService(). RegisterEventTimeTimer (current.timestamp + 60000); текущий тип CountWithTimestamp и имеет три поля, однако ни один из них не назвал timestamp (current.timestamp). –
Да, вы правы. Это было исправлено в документах для Flink 1.3. https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/stream/process_function.html#example –