事件流处理框架NEsper for .NET

复合事件处理(Complex Event
Processing)介绍论及了开源的Esper,NEsper
是一个事变流处理(Event Stream Processing,ESP)和复杂性事件处理(Complex
Event
Processing,CEP)的系统,它好监测事件流并当特定事件发生时点某些行动——可视作是把数据库反过来,语句是原则性的,而数流进上出出。事件处理是软件行业的一个发展趋势,已起频繁家老厂商与众多新创店投入到拖欠市场被。其从来的运用例子包括系统自动交易、BAM、RFID、高级监测体系、欺诈检测,甚至直接集成进SOA。

微软起个同SQL Server 集成的StreamInsight,但是他无是开源的,开源的NEsper
是StreamInsight之外的任何一个挑。虽然StreamInsight集成在SQL
Server,但是它们好无待SQL
Server的,工作起来有些像微微像数据库的倒置,Esper 也是平的。NEsper
引擎允许用存储查询并运行数据经过,来替代存储数据以实施查询存储数据的劳作措施。NEsper
提供零星栽机制来处理事件:
1、NEsper
提供了一个事变模式语言去指定基于表达式的轩然大波模式匹配。这个模式匹配引擎是透过一个态机来实现之。这个事件处理的法门匹配期望有的班或者无有的事件或波之成。它包括因日吗底蕴之逐条事件期间的关系。
2、 NEsper
还提供事件流查询。这个样可以使事件流分析CEP应用的需要。事件流查询提供窗口、聚合、连接和分析的函数来处理事件流。这些查询是经过EPL
语句来贯彻的(被定制了之事件处理语言(event processing lauguage —
EPL)能够抒发丰富的轩然大波极,相关性,尽可能的时刻窗口跨度,因此当啊系统出时最好小化了所要的开精力)。EPL用于视图。视图表示需用组织之数目放入到一个风波流中并且失去叫数据的流。在数量流动的过程遭到针对数码进行拍卖,来取我们最终所
需要的结果。

EPL及SQL一样以select从句和where从句。但是EPL语言使用事件流和views(视图)的定义取代了数据库中的发明。与SQL语句被之表相似,EPL中的views被定义成了能啊查询及过滤的数据。views有指向事件进行排序,能由事件性质被落解析数据,能够让事件分组,以及单独处理事件属性值得等力量。
脚是一个简易的EPL语句,计算了在最近30秒内股票事件流的平均价格。

select avg(price) from StockTickEvent.win:time(30 sec)

连通下去的EPL语句返回了每一个风味类别再100ticks之内的平均价格。

select symbol, avg(price) as averagePrice from
StockTickEvent.win:length(100) group by symbol

脚的例证连接了零星个事件流。第一单事件流包含了于30分钟以内进行诈骗警告的轩然大波。第二个事件是在近年来30秒内进行退款的波。这个波流是通过accout
number进行连续的。

select fraud.accountNumber as accntNum, fraud.warning as warn,
withdraw.amount as amount,MAX(fraud.timestamp, withdraw.timestamp) as
timestamp, ‘withdrawlFraud’ as desc from FraudWarningEvent.win:time(30
min) as fraud, WithdrawalEvent.win:time(30 sec) as withdraw where
fraud.accountNumber = withdraw.accountNumber

3.风波模式匹配
模式匹配是经过状态机实现的。(NFA、DFA之类的,我是当学编译原理上学的)。模式的意味会包含与模式操作相结合的过滤表达。模式表达好嵌套。
下面是5种植档次的模式操作(pattern operators):

(1)控制模式查找器的始建和终结的操作符:every

(2)逻辑操作符:and、or、not

(3)时态操作符(控制事件顺序):->

(4)where-condition(用于用于事件过滤和模式查找器的停止):比如 timer:at

(5)观察者观察的轩然大波时:比如 timer:interval,timer:at

下是一个概括的模式,它为当60秒内价位超80的IBM股票一个告诫:

every StockTickEvent(symbol=”IBM”, price>80) where timer:within(60
seconds)

各个隔5分钟有同样坏警告:

every timer:at(5, *, *, *, *)

诸事件A发生后,接着事件B或者波C发生:

A -> ( B or C )

一个模式,接下事件的一个性需要和第一个事件的该属性匹配:

every a=EventX -> every b=EventY(objectID=a.objectID)

4.模式匹配与事件流分析的重组
当一失误事件流为模式进行匹配时,模式匹配的结果会吃接通下的辨析与拍卖所运用。下面的模式描述的凡在10秒内一个轩然大波与那个接下去的波的id不同。而以此话则更加统计了具有这种情形下之id分组。

select a.id, count(*) from pattern [ every a=Status ->
(timer:interval(10 sec) and not Status(id=a.id)] group by id
5.命名窗口(named windows)
取名窗口是一个大局数据窗口,她能与多询问语句,也能够给询问、被插入、被去除。命名窗口类似于数据库系统遭到之表(table)的定义。
属下我们创建一个命名窗口:
create window AlertNamedWindow as (origin string, priority string,
alarmNumber long)
命名窗口还好于波及时触发查询、修改、删除。这里选出一个统计数字的例证:

on TriggerEvent select count(*) from AlertNamedWindow

 

经Esper探索事件驱动架构

Esper专栏介绍 

NEsper for .NET

Esper近况:事件流处理框架

https://bitbucket.org/emertechie/syslognet

http://www.cppblog.com/mysileng/archive/2012/10/11/193182.html

CEP入门

http://blog.csdn.net/luonanqin/article/category/1557469

http://www.copper-blue.com/blog/nesper-cepthe-series-2/

相关文章