#apache-flink #flink-cep
#apache-flink #flink-cep
Вопрос:
Я отслеживаю движение транспортных средств. Всякий раз, когда они входят или выходят из геозоны, запускается событие. С помощью Flink я хочу проверить, находилось ли транспортное средство в пределах ограждения не менее 2 часов.
Вот шаблон, который я использую:
begin("enter").notFollowedBy("exit").within(Time.hours(2)).followedBy("final-exit")
Дело в том, что частичное совпадение «enter» остается действительным, даже если значение notFollowed «exit» равно true, т.Е. Если транспортное средство возвращается через пару дней и запускает другое событие exit-Fence, оно передает notFollowedBy-правило и приводит к полному совпадению.
Есть ли способ сообщить Flink, чтобы он активно отбрасывал частичное совпадение?
Ответ №1:
Логически имеет смысл, что частичное совпадение «ввод» остается действительным, если за ним не следует «выход» в течение двух дней, поскольку в этом случае за ним не последовал «выход» в течение двух часов. Можете ли вы описать, при каких обстоятельствах вы хотите, чтобы такое частичное совпадение истекло? Например, если вы хотите, чтобы время ожидания истекло через 8 часов, то я думаю, что такое поведение можно описать следующим образом
begin("enter")
.notFollowedBy("exit").within(Time.hours(2))
.followedBy("final-exit").within(Time.hours(8))
Обновить
Если ваша цель — отфильтровать все случаи, когда транспортные средства въезжают и покидают геозону в течение 2 часов, а затем правильно обработать оставшиеся события, тогда вы можете запустить конвейер, состоящий из двух этапов. Первый этап можно описать как
begin("enter")
.followedBy("quick-exit").within(Time.hours(2))
и затем вы можете отбросить события, соответствующие этому шаблону, и выполнить дальнейшую обработку для тех, у которых истекло время ожидания. Подробнее о том, как использовать для захвата и передачи частичных шаблонов с истекшим временем ожидания, которые будут теми, которые вы хотите рассмотреть для дальнейшей обработки, см. В разделе Обработка частичных шаблонов с истекшим временем ожидания. processTimedOutMatch
Комментарии:
1. Да, я пробовал это. Дело в том, что мои транспортные средства движутся довольно медленно, то есть корабли. Бывают случаи, когда они остаются в порту или доке неделями. Но когда они покидают геозону раньше (2 часа) Я могу быть уверен, что эти события «не подлежат погашению» (период времени слишком короток, чтобы превратиться в истинное событие). Поэтому мне нужен способ отбросить их напрямую. Потому что в противном случае в течение 30 дней возможно, что судно снова выйдет из порта после короткого перерыва. Но шаблон даст мне продолжительность от начала до конца, например, 30 дней.
2. Я обновил свой ответ предложением о том, как с этим справиться.