复合事件处理(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

事件流处理框架NEsper for .NET z的更多相关文章

  1. Apache流处理框架对比

    分布式流处理,类似于MapReduce这样的通用计算模型,但是却要求它能够在毫秒级别或者秒级别完成响应.这些系统可以用DAG表示流处理的拓扑. Points of Interest 在比较不同系统是, ...

  2. 【原】javascript事件流

    摘要:事件流这个东西是比较重要的,为了让自己更加理解js中的事件流,必须整理整理,梳理一下事件流的各种东西啊.本文大部分内容参考<javascript高级程序设计第三版> 先来一段书里的原 ...

  3. 【追寻javascript高手之路05】理解事件流

    前言 新的一天又开始了,我们对今天对未来抱有很大期待,所以开始我们今天的学习吧,在此之前来点题外话,还是爱好问题. 周三的面试虽然失败,但是也是很有启迪的,比如之前我就从来没有想过爱好问题,我发现我的 ...

  4. Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架

    根据最新的统计显示,仅在过去的两年中,当今世界上90%的数据都是在新产生的,每天创建2.5万亿字节的数据,并且随着新设备,传感器和技术的出现,数据增长速度可能会进一步加快. 从技术上讲,这意味着我们的 ...

  5. HTML 事件(三) 事件流与事件委托

    本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...

  6. 浅析JavaScript事件流——冒泡

    一.什么是事件冒泡流 我们知道事件流指的是从页面中接受事件的顺序. 为了形象理解事件冒泡,可以想象三军主将诸葛亮,在帐内运筹帷幄,眼观六路耳听八方,这时候前方的战事情况就需要靠传令兵来传达,当第一位传 ...

  7. js事件流

    event:事件对象,当一个事件发生的时候,和当前这个对象发生的这个事件有关的一些详细的信息都会被临时保存在一个指定地方-event对象,供我们在需要调用.event对象必须是在一个事件调用的函数里 ...

  8. javaScript事件(一)事件流

    一.事件 事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字.事件是javaScript和DOM之间的桥梁.你若触发,我便执行——事件发生,调用它的处理函数 ...

  9. 理解DOM事件流的三个阶段

    本文主要解决两个问题: 1.什么是事件流 2.DOM事件流的三个阶段 事件流之事件冒泡与事件捕获 在浏览器发展的过程中,开发团队遇到了一个问题.那就是页面中的哪一部分拥有特定的事件? 可以想象画在一张 ...

随机推荐

  1. AJAX安全-Session做Token

    个人思路,请大神看到了指点 个人理解token是防止扫号机或者恶意注册.恶意发表灌水,有些JS写的token算法,也会被抓出来被利用,个人感觉还是用会过期的Session做token更好,服务器存储, ...

  2. -----IT男生涯————初始篇

    大家好,我是kuuga,一名普通大学的在读生.其实,当时我不知道为什么会选择计算机这个学院,而且还选择了网络工程这个坑爹的专业.为什么说坑爹呢?因为几年学生生涯中编程已经占了很多时间和课程,至于我的专 ...

  3. Codeforces Round #334 (Div. 1) C. Lieges of Legendre

    Lieges of Legendre 题意:有n堆牛,每堆有ai头牛.两个人玩一个游戏,游戏规则为: <1>从任意一个非空的堆中移走一头牛: <2>将偶数堆2*x变成k堆,每堆 ...

  4. PL/SQL — 显式游标

    一.游标的相关概念及特性 1.定义 通过游标方式定位到结果集中某个特定的行,然后根据业务需求对该行进行相应特定的操作. 2.分类 显示游标: 用户自定义游标,用于处理select语句返回的多行数据. ...

  5. Unity3d Shader开发(二)SubShader

    (1)SubShader Unity中的每一个着色器都包含一个subshader的列表,当Unity需要显示一个网格时,它能发现使用的着色器,并提取第一个能运行在当前用户的显示卡上的子着色器. 当Un ...

  6. VS Extension: WPF : 使用全局方式 设置 窗体 foreground background

    VS Extension 中 创建 WPF窗体后,总希望窗体的前后背景色和VS当前配色方案一致. 对每个control使用下列定义可以达到效果 Background="{DynamicRes ...

  7. PHP basename() 函数

    定义和用法 basename() 函数返回路径中的文件名部分. 语法 basename(path,suffix) 参数 描述 path 必需.规定要检查的路径. suffix 可选.规定文件扩展名.如 ...

  8. php 使用jquery实现ajax

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  9. 一些简单的问题. 2的10次方与k (涉及到b k m的要用乘来解读)

    2的10次方是k k就表示2的10次方 2的16次方,解读为 2的6次方(64)*2的10次方(k)  简写为64k    64k=64*k 同理2的20次方  解读为2的10次方*2的10次方  k ...

  10. RedHat Linux 下安装MPlayer 编译源代码方式

    http://blog.csdn.net/hotday_kevin/article/details/6874703