复杂事件处理
复杂事件处理是一种新兴的基于事件流的技术,它将系统数据看作是不同类型的事件,事件在这里通常是有意义的状态变化,通过分析事件间的关系,利用过滤、关联、聚合等技术,根据事件间的时序关系和聚合关系定制检测规则,持续地从事件流中查询出符合要求的事件序列,最终分析得到更加复杂的复合事件。CEP适合的场景包括实时风险管理、实时交易分析、网络欺诈、网络攻击、市场趋势分析等等。
复杂事件处理的特征:
- 目标:从有序的简单事件流中发现一些高阶特征
- 输入:一个或多个由简单事件构成的事件流
- 处理:识别简单事件之间的内在联系,多个符合一定规则的简单事件流构成复杂事件
- 输出:满足规则的复杂事件
复杂事件处理面临多方面的挑战:
- 减少应用存储数据(在分析数据之前)造成的延迟
- 能够持续、实时地分析多个数据流
- 能够关联不同数据流中的事件,从而发现新的相关情形
- 能够迅速响应并发现危险和机会
- 能够迅速地将先前发现的规律应用到新的数据流模型中
- 能够利用已有的应用开发能力快速开放新的高性能,高扩展的应用
- 确保系统和应用的连贯性
- 缺少对于大量的多查询的支持和优化
复杂事件处理引擎
复杂事件处理一般都采用非确定性有限自动机NFA变体模型来处理事件。典型的复杂事件处理系统有SASE,Cayuga以及Esper等。
SASE系统采用了一种基于本地序列操作符以及管道查询的数据流模型,使用关系运算符来定义随后到来的序列,SASE采用了非确定性有限自动机来获取序列事件。SASE提供了一种由EVENT、WHERE、以及WITHIN等组成的规则描述语言,使用逻辑操作符和序列操作来描述事件间的关系。但是SASE语言缺少对聚集操作的支持。SASE+则扩展了SASE语言,提供了迭代和聚集操作的支持。与其他系统不同,SASE不仅会报告用户感兴趣的查询结果,而且会报告匹配此查询的所有事件,这在很大程度上增加了查询的复杂度。SASE的主要局限性在于不能处理层状结构的复杂事件类型,也就是一个查询的结果不能用作另一个查询的输入。