【发布时间】:2019-09-12 11:34:11
【问题描述】:
我想监控一个事件是否在事件到达后 10 分钟内没有到达相同的id。
这是我目前使用的 EPL:
SELECT * FROM pattern[ 每 s=
Order_Status(status="placed") -> (timer:interval(600 sec) 而不是 e=Order_Status(status="delivered", id=s.id ))]
通常placed 事件在delivered 之前到达,但有时由于我们系统中的一些滞后,delivered 事件恰好在placed 之前到达某些id。
案例
-
时间:8:00 事件:Order_Status{id=167, status="placed"}
时间:8:07 事件:Order_Status{id=167, status="delivered"}(10分钟内送达)
-
时间:8:00 事件:Order_Status{id=189, status="placed"}
时间:8:17 事件:Order_Status{id=189, status="delivered"}(10分钟后送达)
-
时间:8:00 事件:Order_Status{id=2637, status="delivered"}
时间:8:08 事件:Order_Status{id=2637, status="placed"}(但不应该警报,问题是
id的delivered事件在placed之前到达)
如上所述,当 EPL 模式在 placed 事件之后启动窗口并等待已经到达的 delivered 事件时,我会收到错误警报。
如何处理这种乱序事件的情况?
注意:
(基本上,如果placed 和delivered 之间的时间差高于某个阈值,我想检查每个id。
我在每个事件中也有时间戳字段)
【问题讨论】:
标签: complex-event-processing esper