Поначалу пример очень полезен, он показывает, как keyedProcessFunction работает во Flink, есть кое-что, на что стоит обратить внимание, это внезапно пришло мне в голову ... Это из Fraud Detector v2: State + Time part Здесь разумно установить таймер, что касается требований реального приложения.
override def onTimer(
timestamp: Long,
ctx: KeyedProcessFunction[Long, Transaction, Alert]#OnTimerContext,
out: Collector[Alert]): Unit = {
// remove flag after 1 minute
timerState.clear()
flagState.clear()
}
Вот проблема:
TimeCharacteristi c IS ProcessingTime, который определяется системными часами на работающей машине, согласно свойству ProcessingTime, водяной знак НЕ будет изменяться сверхурочно, так что это означает, что onTimer никогда не будет вызываться, если TimeCharacteristi c не изменится на eventTime
Согласно сайту flink: время обработки в час Окно будет включать все записи, поступившие в указанный c оператор в период между временем, когда системные часы указали полный час. Например, если приложение начинает работать в 9:15, первое часовое окно обработки будет включать события, обработанные с 9:15 до 10:00, следующее окно будет включать события, обработанные с 10:00 до 11:00, и поэтому на. Если водяной знак не меняется со временем, сработает ли функция окна? потому что условие для запуска окна - это когда водяной знак входит в конечное время окна
Мне интересно условие, при котором окно запускается или нет, не зависит от водяного знака в priocessingTime, даже если на официальном веб-сайте это вообще не упоминается, это будет основано на времени обработки, чтобы вызвать окно
Надеюсь, кто-то сможет потратить на это немного времени, большое спасибо!