Drools CEP是我需要的吗(系统状态和事件重放)

Drools CEP是我需要的吗(系统状态和事件重放),drools,complex-event-processing,esper,Drools,Complex Event Processing,Esper,我正在寻找CEP引擎,但我不知道是否有任何引擎符合我的要求。 我的系统必须处理多个事件数据流并生成复杂的事件,这正是几乎所有CEP引擎都非常适合的(ESPER、Drools) 我将所有原始事件存储在数据库中(这不是CEP的一部分,但我会这样做),并使用规则(或连续查询等)生成复杂事件的自定义操作。但我的一些规则取决于过去的事件。 例如:每当我的配偶回家或离开家时,我可能会有一个传感器发送事件,如果我的车和我的漂亮女人的车都在房子附近,我会收到“危险”短信 问题是,随着事件处理服务的重新启动,我丢

我正在寻找CEP引擎,但我不知道是否有任何引擎符合我的要求。 我的系统必须处理多个事件数据流并生成复杂的事件,这正是几乎所有CEP引擎都非常适合的(ESPER、Drools)

我将所有原始事件存储在数据库中(这不是CEP的一部分,但我会这样做),并使用规则(或连续查询等)生成复杂事件的自定义操作。但我的一些规则取决于过去的事件。 例如:每当我的配偶回家或离开家时,我可能会有一个传感器发送事件,如果我的车和我的漂亮女人的车都在房子附近,我会收到“危险”短信

问题是,随着事件处理服务的重新启动,我丢失了有关系统状态的所有信息(我妻子在家吗?),要恢复它,我需要在未知的时间段内重播事件。系统状态不仅取决于原始事件,还取决于复杂事件

当我需要一些关于过去复杂事件的报告时,同样的问题也会出现。我在数据库中存储了原始事件数据,可以通过回放原始事件来生成这些复杂事件,但我不知道要回放它们的确切时间

同时,很明显,对于大多数规则,可以自动查找过去(或加载要处理的事件的时间段)中要处理的事件数,以恢复系统状态。 若采取的行动取决于我妻子是否在家,则CEP系统必须请求最后一次状态更改。如果要求报告复杂事件,且复杂事件取决于前一期间的平均价格,则应重播此期间的所有价格变化事件。等等


如果我错过了什么

我不确定您的问题是当前的CEP产品是否提供将历史数据与实时事件连接起来的功能,但如果您需要,Esper允许您从JDBC源(将历史数据与实时事件连接起来)中提取数据,并将其反映在EPL语句中。我想你已经看过Esper网站了,如果没有的话,你会看到Esper有非常好的文档,有很多烹饪书的例子


但是,即使您在现场事件之后对历史事件进行建模,这也不能解决您选择正确时间段的问题,正如您所写的,这个时间段取决于用例。

如果我记得正确,可能会解决您的问题。如果您重新启动它,它不会丢失状态,并且它包含一个虚拟逻辑时钟,以便您可以使用任何时间概念重播事件。

正如前面提到的,我认为您的问题不是真正的引擎问题,而是更多的用例问题。我所熟悉的所有引擎,包括Drools Fusion和Esper,都可以将传入事件与从外部源(如数据库)按需查询的历史数据和/或状态数据连接起来。在我看来,您需要做的是在相关更改发生时保持状态(或“时间戳检查点”),并在重新启动时重新加载状态,而不是在未知的时间范围内重播事件

或者,如果使用Drools,则可以检查现有规则(某种对规则/查询的反映),以确定规则需要哪些类型的事件,并回溯事件日志,直到满足所有要求的时间点,然后使用会话时钟从那里加载/重播事件

最后,您可以使用集群来减少重启,但这并不能解决您描述的问题


希望有帮助。

。。。它还支持规则语言中的定位功能,因此“当人员X进入区域A、B或C时发出警报”之类的事情很容易。。。它会记住事物的状态,这会让你记住你妻子现在在哪里