Apache Flink — Сопоставление полей с одинаковым значением

#apache-flink #flink-streaming #flink-sql #flink-cep

Вопрос:

У нас есть пример использования, когда нам нужно найти шаблон для грубой силы, например, 10 неудачных входов с одного и того же устройства и одного и того же имени пользователя, за которыми следует успешный вход с того же имени пользователя и с того же устройства. Это должно произойти в течение 10 минут.

Допустим, у нас 10 неудачных событий входа в Windows с пользователем A в качестве имени пользователя и B в качестве имени устройства, и у нас успешный вход в систему от пользователя A с тем же устройством B, мы должны поднять предупреждение.Есть ли какой-либо способ, чтобы flink CEP соответствовал упомянутому варианту использования. Устройство и имя пользователя не будут известны заранее, также не известна мощность полей.

Ответ №1:

С помощью Flink CEP (с использованием API Java DataStream) вы бы использовали что-то вроде keyBy(event -> new Tuple2<>(event.user, event.device)) , а затем сопоставили шаблон с этим потоком с разделением по ключам. С помощью функции Flink SQL MATCH_RECOGNIZE вы хотите PARTITION BY user, device это сделать .

Ограничение по времени обрабатывается WITHIN предложением. Например:

 PATTERN (F{10} S) WITHIN INTERVAL '10' MINUTE
DEFINE
  F.status = 'failure',
  S AS S.status = 'success'
 

Комментарии:

1. Спасибо, ответ действительно то, что я искал

2. Рад, что это помогло. Кстати, я очистил пример.

3. Я был бы признателен, если бы вы приняли ответ.