Некоторые вопросы, связанные с демонстрацией обнаружения мошенничества из Flink DataStream API - PullRequest
0 голосов
/ 26 мая 2020

Поначалу пример очень полезен, он показывает, как 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, даже если на официальном веб-сайте это вообще не упоминается, это будет основано на времени обработки, чтобы вызвать окно

Надеюсь, кто-то сможет потратить на это немного времени, большое спасибо!

1 Ответ

0 голосов
/ 26 мая 2020

Позвольте мне прояснить несколько вещей:

Flink предоставляет два вида таймеров: таймеры времени таймеры и таймеры времени обработки . Таймер времени события запускается по прибытии водяного знака, равного или превышающего временную метку таймера, а таймер времени обработки запускается по достижении системными часами метки времени таймера.

Водяные знаки актуальны только при выполнении события обработки времени, и единственная цель, которую они служат, - запускать таймеры времени событий. Они вообще не играют никакой роли в приложениях, подобных тому, которое приведено в пошаговом руководстве по коду API DataStream , на которое вы ссылались. Если это приложение использует таймеры времени событий, прямо или косвенно (с помощью времени события windows или через один из API более высокого уровня, например SQL или CEP), то ему потребуются водяные знаки. Но поскольку он использует только таймеры времени обработки, он не использует водяные знаки.

Кстати, этот пример обнаружения мошенничества не использует оконный API Flink, потому что оконный механизм Flink не подходит для требований этого приложения . Здесь мы пытаемся сопоставить шаблон с последовательностью событий в пределах указанного c временного интервала - поэтому нам нужен другой вид «окна», которое начинается в момент особого инициирующего события (небольшая транзакция, в данном случае case), а не TimeWindow (например, предоставляемые Flink Window API), который выровнен по часам (т. е. с 10:00 до 10:01).

...