首页 文章

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

提问于
浏览
4

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

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

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

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

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

如果我错过了什么?

3 回答

  • 3

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

  • 0

    我不确定您的问题是当前的CEP产品是否提供与实时事件相关的历史数据,但如果这是您需要的,Esper允许您从JDBC源(将历史数据与您的直播事件相关联)中提取数据并反映他们在你的EPL声明中 . 我猜你已经检查了Esper网站,如果没有,你会发现Esper有很多文档和很多菜谱示例

    但即使您在直播活动之后对历史事件进行建模,也无法解决选择正确时间范围的问题,并且正如您所写的那样,此时间范围取决于用例 .

  • 0

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

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

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

    希望能帮助到你 .

相关问题