事件流处理框架NEsper for .NET z
复合事件处理(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
https://bitbucket.org/emertechie/syslognet
http://www.cppblog.com/mysileng/archive/2012/10/11/193182.html
http://blog.csdn.net/luonanqin/article/category/1557469
事件流处理框架NEsper for .NET z的更多相关文章
- Apache流处理框架对比
分布式流处理,类似于MapReduce这样的通用计算模型,但是却要求它能够在毫秒级别或者秒级别完成响应.这些系统可以用DAG表示流处理的拓扑. Points of Interest 在比较不同系统是, ...
- 【原】javascript事件流
摘要:事件流这个东西是比较重要的,为了让自己更加理解js中的事件流,必须整理整理,梳理一下事件流的各种东西啊.本文大部分内容参考<javascript高级程序设计第三版> 先来一段书里的原 ...
- 【追寻javascript高手之路05】理解事件流
前言 新的一天又开始了,我们对今天对未来抱有很大期待,所以开始我们今天的学习吧,在此之前来点题外话,还是爱好问题. 周三的面试虽然失败,但是也是很有启迪的,比如之前我就从来没有想过爱好问题,我发现我的 ...
- Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架
根据最新的统计显示,仅在过去的两年中,当今世界上90%的数据都是在新产生的,每天创建2.5万亿字节的数据,并且随着新设备,传感器和技术的出现,数据增长速度可能会进一步加快. 从技术上讲,这意味着我们的 ...
- HTML 事件(三) 事件流与事件委托
本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...
- 浅析JavaScript事件流——冒泡
一.什么是事件冒泡流 我们知道事件流指的是从页面中接受事件的顺序. 为了形象理解事件冒泡,可以想象三军主将诸葛亮,在帐内运筹帷幄,眼观六路耳听八方,这时候前方的战事情况就需要靠传令兵来传达,当第一位传 ...
- js事件流
event:事件对象,当一个事件发生的时候,和当前这个对象发生的这个事件有关的一些详细的信息都会被临时保存在一个指定地方-event对象,供我们在需要调用.event对象必须是在一个事件调用的函数里 ...
- javaScript事件(一)事件流
一.事件 事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字.事件是javaScript和DOM之间的桥梁.你若触发,我便执行——事件发生,调用它的处理函数 ...
- 理解DOM事件流的三个阶段
本文主要解决两个问题: 1.什么是事件流 2.DOM事件流的三个阶段 事件流之事件冒泡与事件捕获 在浏览器发展的过程中,开发团队遇到了一个问题.那就是页面中的哪一部分拥有特定的事件? 可以想象画在一张 ...
随机推荐
- Linux下UDP收/发广播消息简单实现
发送广播消息 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/typ ...
- HDOJ(1000) A + B Problem
代码如下: #include <stdio.h> int main(void) { int a, b; ){ printf("%d\n", a+b); } ; }
- Spring.Net AOP实例
Spring.Net和Log4net.NUnit.NHibernate一样,也是先从Java中流行开来,然后移植到了.NET当中,形成了.NET版的Spring框架.其官方网站为:http://www ...
- 谈谈我对OAuth的理解
自己的理解是,OAuth是一种授权标准. 用于为除了用户之外的第三方应用授权, 并且在授权过程中,第三方应用不会接触到用户的任何信息, 授权完成后,第三方应用可访问用户授权范围内的信息. ...
- 前端资源多个产品整站一键打包&包版本管理(三)—— gulp分流
问题: 当我们一个工作台里面有好几个项目的时候,我们要为项目的前端资源进行打包,但是,gulpfile只有一个,如果我们把所有的打包都放在同一个文件里面,首先文件会越来越大,而且不便于管理,这时,我们 ...
- php中的修饰符
上面使用了一个修饰符U,详见关于修饰符的介绍. PHP正则表达式修饰符的理解: 在PHP正则表达式里面的修饰符可以改变正则的很多特性,使得正则表达式更加适合你的需要(注意:修饰符对于大小写是敏感的,这 ...
- python3编码问题
继续收集python3编码问题相关资料 资料来源 鹏程的新浪博客(转载)http://blog.sina.com.cn/s/blog_6d7cf9e50102vo90.html 这篇鹏程老师写的关 ...
- Html5 布局经验分享-第1集
移动端的布局与pc端的布局相比 移动端的布局就简单的多,兼容性不必考虑那么多,css3各种特性基本上是可以放肆的写:(个人看法) 本人做移动web 布局一段时间了,把这其中遇到的一些问题总结下来,均是 ...
- 移动前端javascript事件
移动端事件: // 手势事件 touchstart //当手指接触屏幕时触发 touchmove //当已经接触屏幕的手指开始移动后触发 touchend //当手指离开屏幕时触发 touchcanc ...
- scrollview始终显示滚动条 Android
设置scrollview的:android:fadeScrollbars="false"表示始终显示垂直滚动条