Esper学习之一:Esper介绍
来源:互联网 发布:linux chgrp 编辑:程序博客网 时间:2024/05/22 00:45
转载请注明出处:http://blog.csdn.net/luonanqin
说到Esper,不得不说一下CEP。CEP即Complex Event Process,中文意思就是“复杂事件处理”。听起来好像很复杂,实际上就是基于事件流进行数据处理,把要分析的数据抽象成事件,然后将数据发送到CEP引擎,引擎就会根据事件的输入和最初注册的处理模型,得到事件处理结果。
有人可能要问了,这和Hadoop有什么区别?可是本人不才,没学过Hadoop,虽然说赶上了这阵风,但是从很多人那了解以后,觉得不过就是个不是特别成熟的工具,然后各个公司要根据需求对Hadoop进行二次开发,就需要懂得源码的人。所以就没打算学了,一个工具而已,等到自己确实有空的时候再学也不迟。至于CEP和Hadoop的区别,应该是Esper和Hadoop的区别,我的理解是:Hadoop适合做事后分析,而Esper适合实时分析。Hadoop我确实不是很了解,如果有问题还希望大家指正。
CEP是一种标准,Esper只是对这个标准的一种开源实现。除了Esper,很多大公司也有类似的商业软件,比如IBM,Sybase等等,听说巨贵无比。CEP的一个重要特点就是他是一个内存计算工具和类SQL语句。内存计算可以说是一把双刃剑。好处自不必说,一个字:快!坏处也显而易见,数据有丢失的风险,而且还有容量的限制(实时计算其实并不受制于内存大小,而是得看如何对实时进行定义,也就是具体的业务来决定了)。所以如果业务不能容忍数据丢失,那么高可用方案就必须做好,不过Esper的高可用很不好做,后面我将会说到。
CEP的类SQL语句,可以理解为处理模型的定义与描述。这是运行在CEP引擎中的特殊语句,之所以叫他类SQL,是因为它和SQL确实很像,除了select,insert,delete,update,而且也有avg,count等函数。所以对于会SQL的人来说,他的语法结构大致还是能猜出一二的。在Esper中,这个句子叫做EPL,即Event Process Language。作为Esper的核心内容,对于它的讲解有三四百页的英文文档,所以之后我会慢慢向大家细细说明的。
下面就简单写个列子给大家看看吧。场景是计算3个苹果的平均价格
package test;import com.espertech.esper.client.EPAdministrator;import com.espertech.esper.client.EPRuntime;import com.espertech.esper.client.EPServiceProvider;import com.espertech.esper.client.EPServiceProviderManager;import com.espertech.esper.client.EPStatement;import com.espertech.esper.client.EventBean;import com.espertech.esper.client.UpdateListener;/** * * @author luonanqin * */class Apple{private int id;private int price;public int getId(){return id;}public void setId(int id){this.id = id;}public int getPrice(){return price;}public void setPrice(int price){this.price = price;}}class AppleListener implements UpdateListener{public void update(EventBean[] newEvents, EventBean[] oldEvents){if (newEvents != null){Double avg = (Double) newEvents[0].get("avg(price)");System.out.println("Apple's average price is " + avg);}}}public class Test {public static void main(String[] args) throws InterruptedException {EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider();EPAdministrator admin = epService.getEPAdministrator();String product = Apple.class.getName();String epl = "select avg(price) from " + product + ".win:length_batch(3)";EPStatement state = admin.createEPL(epl);state.addListener(new AppleListener());EPRuntime runtime = epService.getEPRuntime();Apple apple1 = new Apple();apple1.setId(1);apple1.setPrice(5);runtime.sendEvent(apple1);Apple apple2 = new Apple();apple2.setId(2);apple2.setPrice(2);runtime.sendEvent(apple2);Apple apple3 = new Apple();apple3.setId(3);apple3.setPrice(5);runtime.sendEvent(apple3);}}很简单的例子,虽然没有加注释,也应该很好懂吧。大家可以自己运行一下看看是什么结果。
Esper的官网:http://esper.codehaus.org/ 里面有很多例子可以研究一下。
下节会讲解一下Esper的“事件”。敬请关注
- Esper学习之一:Esper介绍
- Esper学习之一:Esper介绍
- Esper学习之一:Esper介绍
- Esper学习之一:Esper介绍 .
- Esper学习——Esper介绍
- Esper
- Esper
- esper
- Esper开发之一
- Esper企业版介绍(一)Esper HA
- Esper企业版介绍(四)Esper JDBC
- Esper企业版介绍(五)Esper JMX
- Esper专栏介绍
- Esper专栏介绍
- Esper企业版介绍(二)Esper HQ / WEB UI
- Esper学习之四:Context
- Esper学习之四:Context
- Esper学习之四:Context
- POJ--3017--Cut the Sequence--DP优化
- JDBC连接mySQL数据库
- SED单行脚本快速参考(Unix 流编辑器)
- HDU 1385 Minimum Transport Cost (Floyd算法 + 路径输出)
- native2ascii命令
- Esper学习之一:Esper介绍
- 结构体数组(C++)
- 怎样用U盘安装Ubuntu系统
- windows 2008挂载新磁盘、分区的方法
- [shell]特殊变量汇总
- Error Correction
- .net
- 大连SEO为你解答:网站内页不收录如何解决?
- An Easy Problem