4

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

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

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

当我需要一些关于过去复杂事件的报告时,也会出现同样的问题。我将原始事件数据存储在数据库中,并且可以生成这些复杂事件来重播原始事件,但我不知道我必须在哪个时期重播它们。

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

如果我错过了什么?

4

3 回答 3

3

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

于 2011-03-31T22:00:59.233 回答
0

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

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

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

希望能帮助到你。

于 2012-06-12T16:08:06.753 回答
0

我不确定您的问题是否是当前的 CEP 产品是否提供将历史数据与实时事件相结合,但如果这是您需要的,Esper 允许您从 JDBC 源(将您的历史数据与您的实时事件连接)中提取数据并反映它们在您的 EPL 语句中。我猜你已经查看了 Esper 网站,如果没有,你会发现 Esper 有很好的文档,里面有很多食谱示例

但是,即使您在实时事件之后对历史事件进行建模,也不能解决您选择正确时间范围的问题,并且正如您所写,此时间范围取决于用例。

于 2011-02-23T11:01:04.970 回答