我正在开展一个持续不断的活动项目。有许多并发用户可以创建/更新/删除规则,并在流匹配这些规则时获取警报。
我在这里使用了Esper,我从动态生成EPL语句并注册它们。这很容易出错,因为规则有时很复杂,无法动态转换为EPL。这也是不可扩展的。
处理此问题的正确方法是什么?是否有这种用例的标准方法/库。
谢谢
答案 0 :(得分:0)
通常使用复杂的事件处理引擎来满足复杂的需求。顾名思义,我们正在寻找事件和时间之间的复杂关系,因此它的复杂事件处理。
简单的事件处理将用于简单的要求。只需两种方案即可测试简单的需求。例如,假设我们想要查找温度超过100的事件.Esper EPL中的设计是“select * from Event(温度> 100)。这可以通过两个或三个场景来测试:例如,Event = {temp = 99},Event = {temp = 100}和Event = {temp = 101}。
中等复杂度事件处理有一些用例。这些通常需要4到9个场景进行测试。例如,假设我们要查找超过100个在一个滑动分钟内到达的事件(滑动,而不是跳跃)。在Esper EPL中的设计是“从事件#时间(60)中选择计数(),具有计数()> 100” 。现在需要一堆场景来测试这个规则,例如没有事件,100个事件,101个事件,61个事件超过61秒等等。这里涉及的时间使得这些场景更难描述和测试。 / p>
我想说复杂的事件处理是针对事件处理的中到高复杂度的情况。这是你需要首先明确要求的东西。在设计Esper EPL之前,您需要确定事件到达和时间的不同场景。
要求驱动工具。 Esper确实能很好地处理更复杂的需求,但有一个学习曲线。根据我的经验,可以完成扩展,但需要进行规划。当谈到一个句子中的低延迟分析和缩放时,没有银弹简单的方法。 Esper有很高的可用性,但这不是免费的,但在Kafka堆栈中可以很好地扩展。