我正在寻找一个CEP引擎,但我不知道是否有任何引擎符合我的要求。 我的系统必须处理多个事件数据流并生成复杂事件,这正是几乎所有CEP引擎完全适合的(ESPER,Drools)。
我将所有原始事件存储在数据库中(它不是CEP部分,但我这样做)并使用规则(或连续查询或其他内容)来生成复杂事件的自定义操作。但我的一些规则依赖于过去的事件。 例如:每次我的配偶出门或离开家时,我都可以发送传感器发送事件,如果我的车和我喜欢的女人的车都在房子附近,我会收到短信'Dangerous'。
问题是,重启事件处理服务后,我会丢失所有关于系统状态的信息(我的妻子在家吗?)并恢复它我需要在不知道的时间段内重播事件。系统状态不仅可以依赖于原始事件,还可以依赖于复杂事件。
当我在过去需要一些关于复杂事件的报告时,会出现同样的问题。我有原始事件数据存储在数据库中,并且可以生成重放原始事件的这些复杂事件,但我不知道我必须重播它们的确切时期。
同时很明显,对于大多数规则,可以自动查找要从过去(或加载要处理的事件的时间段)处理的事件数量以恢复系统状态。 如果给定的行动取决于我妻子在家的存在,CEP系统必须要求最后的状态变更。如果要求报告复杂事件且复杂事件取决于前一期间的平均价格,则应重播此期间的所有价格变动事件。等等...
如果我错过了什么?
答案 0 :(得分:3)
如果我没记错的话,RuleCore CEP Server可能会解决您的问题。如果重新启动它并且它包含一个虚拟逻辑时钟,它不会丢失状态,这样您就可以使用任何时间概念重放事件。
答案 1 :(得分:0)
我不确定您的问题是当前的CEP产品是否提供与实时事件相关的历史数据,但如果这就是您所需要的,Esper允许您从JDBC源(将您的历史数据与您的直播事件相关联)中提取数据)并在您的EPL陈述中反映出来。我猜你已经检查了Esper网站,如果没有,你会发现Esper有很多文档和很多菜谱实例
但即使您在直播活动之后对历史事件进行建模,也无法解决选择正确时间范围的问题,并且正如您所写,此时间范围取决于用例。
答案 2 :(得分:0)
正如之前的人提到的,我不认为你的问题确实是一个引擎问题,而是一个用例问题。我熟悉的所有引擎,包括Drools Fusion和Esper都可以将传入事件与来自外部源(如数据库)的历史数据和/或状态数据相结合。在我看来,当相关更改发生时,您需要做的是持久状态(或“时间戳检查点”),并在重新启动时重新加载状态,而不是在未知时间范围内重放事件。
或者,如果使用Drools,您可以检查现有规则(对规则/查询的反映类型),以确定您的规则需要哪些类型的事件,并回溯您的事件日志,直到满足所有要求的时间点为止,使用会话时钟从那里加载/重放您的事件。
最后,您可以使用群集来减少重新启动,但这并不能解决您描述的问题。
希望它有所帮助。