事件流处理(Event Stream Processing,ESP)是指以近实时的方式计算、分析流事件将事件与事件查询语句相匹配并通知
监听器。与之相关还有一个概念叫做复杂事件处理,指监控并分析事件之间的关系包括时间关系、逻辑关系等。与传统事件驱动结构相比, 事件流处理和复杂事件处理是传统事件驱动的一个扩展,它们引入了新的技术理念,比如说许多事件复模式的检测,事件相关和
抽象,事件继承,事件因果性、从属性、同步性、定时和事件驱动过程。在事件流处理模式下的系统,可以实时监测事件流,当特定事件发生时触发某些行动。可以认为事件流处理与数据库的管理类似,只是处理方式相反。在传统的数据库系统中,采用信息保持静态,在数据中执行查询的方式而在事件流处理系统中,采用的是查询保持静态,数据不断变化的方式。简单的说,事件流处理是把数据库反过来,语句是固定的,而数据流进流。
简介
事件流处理,是比较新的一个概念,要了解事件流处理技术,首先要了解什么是事件流也叫
数据流。数据流最初是通信领域使用的概念,代表传输中所使用的信息的数字编码信号序列。然而,我们所提到的数据流概念与此不同。这里提到的数据流具有以下两个特点能够持续产生大量的数据这类数据最早出现与传统的银行和股票交易领域,也在互联网监控、无线通信网等领域出现、需要以近实时的方式对更新数据流进行复杂分析如趋势分析、预测、监控等。事件流处理是数据流处理的一个子集,是一种特定的数据流处理。事件流处理与一般的数据流处理不同的是事件流处理通常是异步的,事件可能源自不同的地方,而且类型也可能各异,接收的顺序也可能差异很大。事件流处理需要使用事件属性、事件发生的时间以及事件中任何能推断的因果关系作为它的基础元素。事件流模型相对于传统静态数据处理模型主要有如下几方面的特征:
优点
事件流处理模式是通过将几种机理整合在一起实现实时操作的。首先,支持入处理,即输入的事件流一进入系统就马上开始流经连续的查询。在它们流动时,查询变换事件,连续地给出结果,所有这一切都是在内存中进行的,对磁盘存储的读或写操作是可选的,在很多情况下是被异步处理的。入处理克服了常规数据库管理系统使用的传统出处理的局限,在出处理中,数据必须插入数据库,并在开始任何处理之前建立索引。通过将磁盘存储排除在处理的关键路径之外,与传统的处理方法相比,事件流处理模式获得了明显的性能提高。
第二,事件流处理模式采用了单处理模型,其中所有与时间密切相关的操作包括事件处理、定制的应用逻辑的存储和执行是作为一个多线索进程的一部分运行的。这种整合的方法消除了进程转换的高开销,在使用多个软件系统来提供同样功能的解决方案中就存在着这种进程转换。
第三,事件流处理模式提供了一个灵活的进程间存储模型和基于标准的对外部数据库的访问。内存中散列表用于极快的插入和查找操作。嵌入的数据库用于确保数据的一致性,以及能利用风格的描述性查询进行的访问和操纵。外部的、远程进程数据库通过标准的“
开放数据库互连”调用进行访问,当要支持过时的数据库时,这种数据库用起来很方便,能方便地实现数据库与外部应用程序的共享。事件流处理模式拥有内在的过滤、聚合和相关、以及合并操作符,它们操纵事件的窗口。标准定义在有限大小的表格之上,从而执行引擎知道何时
完成了所有的操作。相反,流存在着永不结束的潜在可能,在结束处理和输出答案时必须要有指令。通过定义操作符的范围,窗口构建为此目的服务。在传统的应用程序中,一小时的窗口可以用来表达计算以小时为量加权的面向流的查询。窗口是用户可以配置的,可以定义在时间、事件数量或者一个事件中其他属性的断开点上。面向流的操作符对数据流中因次序破坏或数据达到的延误造成的破坏提供了弹性,而这两种情况在现实世界中是经常发生的。弹性是通过使操作符对时间敏感而获得的。操作符可以有选择地被告知,对失序的信息等待更长一些时间,或者规定的时间用完不再等待可能永远不会到来的过时信息。
最后,事件流处理模式支持改进可扩性和可用性的分布式操作。增强可扩性是通过让处理分割并透明地分布到多个机器上实现的,不必修改应用程序。高可用性对保留应用程序的完整性是至关重要的,可避免实时处理的中断。
事件及其表示
事件语义上指是信息系统中已经发生的一个动作或者状态转换的记录,但同时还包含其在计算机中的表示。事件由事件类型来指明其结构,每次具体事件类型的发生称为事件实例。发送到事件处理方的外部事件称为原子事件,为瞬时的、原子的。事件结构中最常见的是结构化事件,这样的事件的元素可以视为关系元组,关系元组具有固定的模型。因此这样的事件具有二维结构,一维是事件元素发生的时间或者序列,另一维是关系元组模型的属性值。
除结构化的事件外,还有半结构化事件和无结构事件。半结构化事件是指表示形式如文档这样的事件,这样的事件中存在着用户定义的、具有一定语义的标记,可用这些标记将事件流划分为独立的事件流元素。而无结构数据,如具有自描述结构的文本流,以及连续的视频流、音频流等,这种流的结构信息完全包含在数据的语义中,无法孤立地从数据进行元素的划分。
上述三种事件元素结构中,结构化的事件与数据库系统中的关系有相似的结构,相对容易解析而无结构事件必须首先借助某种外部方法将原始的事件转换为结构化的事件,不然将很难处理。且对结构化事件的研究己经基本能够满足常见的系统应用需求,所以本文的事件流处理研究主要针对结构化的事件。
事件模式
事件关联是对系统中多节点处以及系统外部生成的大量事件进行深化处理的过程,首先对事件进行语法层面的同一化处理,然后采用规则匹配、推理等多种关联策略对大量事件进行语义层面的分析,根据事件之间存在的时序关系、因果关系等关联关系,将多个事件关联成为事件模式。事件模式定义成一个对多个其它子事件的抽象的事件,它通过对事件关联关系进行组合,减少事件数量,提高事件质量。事件的质量是应用相关的,因此先给出事件模式的语法和通用语义。原始模式表达式是对一类事件的描述,它与对应的一个事件类相关联。原始模式只能匹配单个事件。模式运算,事件之间的运算主要分为三种:
与运算:表示模式同时成立。表示模式和模式同时成立
或运算:模式中的一个或者多个成立时序关系模式在时间维度上的先后关系。
复合模式表达式,复合模式表达式是指多个原始模式表达式经过一定的运算之后形成的,用户可以指定复合模式表达式,复合模式可以关联不同系统的不同事件。如一个复合模式是在事件窗口内先发生事件后发生事件。原始模式是复合模式的基本构建块。用表示复合模式。
复合模式可以这样定义:
原始模式是一个复合模式;
由原始模式与原始模式通过模式关系、关联条件构成的描述是复合模式;
由原子模式与复合模式通过模式关系、关联条件构成的描述是复合模式;
由复合模式与复合模式通过模式关系、关联条件构成的描述是复合模式;
其他所有的模式都不是复合模式。