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
)