CEP, как обнаружить и сообщить о дубликатах в потоке?

Есть ли способ обнаружить и сообщить о дубликатах в потоке?

пример: поток данных для входа пользователя, содержащий кортежи с именем пользователя и IP-адресом. Цель состоит в том, чтобы обнаружить вход одного и того же пользователя с разных IP-адресов в течение последних 10 секунд.

Я взглянул на языки запросов siddhi (wso2) и esper, но не могу понять, как этого добиться.

2 ответа

Решение

В WSO2 CEP (Сиддхи) вы можете достичь этого, используя "Шаблоны"

Пример запроса:

from every a1 = authStream
            -> b1 = authStream[username == a1.username and ipAddress != a1.ipAddress] 
            within 10000 insert into alertStream a1.username as detectedUserName 

В приведенном выше запросе a1 и b1 ссылаются на 2 события из authStream, и мы будем искать шаблон, где их имена пользователей равны, а ip-адреса различны. Используя ключевое слово inside, мы можем ограничить период времени, в течение которого должен происходить этот шаблон (в миллисекундах). Затем мы вставляем найденные совпадения в alertStream.

Для получения дополнительной информации о шаблонах ознакомьтесь с документацией WSO2 CEP по шаблонам. Эта страница по расширенным запросам также может помочь.

Esper, например, используя предложенный стандарт шаблонов SQL для распознавания совпадений:

select * from AuthStream.win:time(10 sec)
match_recognize (
  partition by username
  measures A.username as a_name
  pattern (A B)
  define 
    B as B.ipaddress != A.ipaddress 
)
Другие вопросы по тегам