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个苹果的平均价格

  1. package test;
  2. import com.espertech.esper.client.EPAdministrator;
  3. import com.espertech.esper.client.EPRuntime;
  4. import com.espertech.esper.client.EPServiceProvider;
  5. import com.espertech.esper.client.EPServiceProviderManager;
  6. import com.espertech.esper.client.EPStatement;
  7. import com.espertech.esper.client.EventBean;
  8. import com.espertech.esper.client.UpdateListener;
  9. /**
  10. *
  11. * @author luonanqin
  12. *
  13. */
  14. class Apple
  15. {
  16. private int id;
  17. private int price;
  18. public int getId()
  19. {
  20. return id;
  21. }
  22. public void setId(int id)
  23. {
  24. this.id = id;
  25. }
  26. public int getPrice()
  27. {
  28. return price;
  29. }
  30. public void setPrice(int price)
  31. {
  32. this.price = price;
  33. }
  34. }
  35. class AppleListener implements UpdateListener
  36. {
  37. public void update(EventBean[] newEvents, EventBean[] oldEvents)
  38. {
  39. if (newEvents != null)
  40. {
  41. Double avg = (Double) newEvents[0].get("avg(price)");
  42. System.out.println("Apple's average price is " + avg);
  43. }
  44. }
  45. }
  46. public class Test {
  47. public static void main(String[] args) throws InterruptedException {
  48. EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider();
  49. EPAdministrator admin = epService.getEPAdministrator();
  50. String product = Apple.class.getName();
  51. String epl = "select avg(price) from " + product + ".win:length_batch(3)";
  52. EPStatement state = admin.createEPL(epl);
  53. state.addListener(new AppleListener());
  54. EPRuntime runtime = epService.getEPRuntime();
  55. Apple apple1 = new Apple();
  56. apple1.setId(1);
  57. apple1.setPrice(5);
  58. runtime.sendEvent(apple1);
  59. Apple apple2 = new Apple();
  60. apple2.setId(2);
  61. apple2.setPrice(2);
  62. runtime.sendEvent(apple2);
  63. Apple apple3 = new Apple();
  64. apple3.setId(3);
  65. apple3.setPrice(5);
  66. runtime.sendEvent(apple3);
  67. }
  68. }

很简单的例子,虽然没有加注释,也应该很好懂吧。大家可以自己运行一下看看是什么结果。

Esper的官网:http://esper.codehaus.org/ 里面有很多例子可以研究一下。

原文:http://blog.csdn.net/luonanqin

Esper学习之一:Esper介绍的更多相关文章

  1. Esper学习之六:EPL语法(二)

    中秋三天,说闲也不闲,调调工作的代码,倒还解决不少问题.不过也是因为最近工作忙的缘故,Esper被我冷落不少日子了,趁着今天最后一天,赶紧写一篇出来. 从上一篇开始说EPL的语法,主要是关于注解的.今 ...

  2. Esper学习之五:EPL语法(一)

    上篇说到了Esper的Context,要是不了解的同学请参看<Esper学习之四:Context>,看过的同学如果还是不理解的话可以给我评论,我将会尽可能的解答.之前有些同学问我Conte ...

  3. Esper学习之四:Context

    上周末打球实在太累了,就没来得及更新,只是列了个提纲做做准备,发现Context还是有很多内容的.结果也花了不少时间才写完,所以这篇需要各位慢慢消化,并且最好多写几个例子加深理解. 如果有不了解Esp ...

  4. Esper学习之七:EPL语法(三)

    1.Aggregation 和SQL一样,EPL也有Aggregation,即聚合函数.语法如下: aggregate_function([all|distinct] expression) aggr ...

  5. Esper学习之三:进程模型

    之前对Esper所能处理的事件结构进行了概述,并结合了例子进行讲解,不清楚的同学请看Esper学习之二:事件类型.今天主要为大家解释一下Esper是怎么处理事件的,即Esper的进程模型. 1.Upd ...

  6. Esper学习之十二:EPL语法(八)

    今天的内容十分重要,在Esper的应用中是十分常用的功能之一.它是一种事件集合,我们可以对这个集合进行增删查改,所以在复杂的业务场景中我们肯定不会缺少它.它就是Named Window. 由于本篇篇幅 ...

  7. Esper学习之十一:EPL语法(七)

    上一篇说到了EPL如何访问关系型数据库这种数据源,实际上别的数据源,比如:webservice.分布式缓存.非关系型数据库等等,Esper提供了统一的数据访问接口.然后今天会讲解如何创建另外一种事件类 ...

  8. Esper学习之九:EPL语法(五)

    本篇的内容主要包括了Subquery(也就是子查询)和Join,内容不少,但是不难,基本上和sql差不太多. 1.Subquery EPL里的Subquery和sql的类似,是否比sql的用法更多我不 ...

  9. 人工智能深度学习Caffe框架介绍,优秀的深度学习架构

    人工智能深度学习Caffe框架介绍,优秀的深度学习架构 在深度学习领域,Caffe框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要 ...

  10. iOS学习之NSBundle介绍和使用

    iOS学习之NSBundle介绍和使用 http://blog.csdn.net/totogo2010/article/details/7672271 新建一个Single View Applicat ...

随机推荐

  1. MongoDB 3.X JAVA基本操作

    对Collection的操作 import java.util.ArrayList; import java.util.Iterator; import java.util.List; import ...

  2. C# 在EF中直接运行SQL命令

    相信不少使用EF的同志们已经知道如何在EF中运行SQL命令了.我在这里简单总结下,希望对大家学习EF有所帮助! 在 EF第一个版本(.NET 3.5 SP1)中,我们只能通过将ObjectContex ...

  3. DShow + OpenGL播放视屏

    #include <DShow.h> #pragma include_alias( "dxtrans.h", "qedit.h" ) #define ...

  4. Web4个实验题目DOM+JS

    实验目的: 1. 掌握DOM对象的基本语法 2. 掌握getElementById函数 3. 掌握getElementsByTagName函数 来源http://www.cnblogs.com/xia ...

  5. 17 HTTP编程入门

    http请求原理 http请求原理我就不多说了,网上一搜就能搜索到,下面我注意是记录下http模块的使用方法 http 模块 HTTP-server hello world 我们使用HandleFun ...

  6. 简要介绍DES、RSA MD5 sha1 四种加密算法的优缺点,以及使用场合

    美国数据加密标准(DES)是对称密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立.密钥较短,加密处理简单,加解密速度快,适用于加密大量数据的场合.RSA是非对称算法,加密密钥和解密密钥是不 ...

  7. faster-rcnn原理及相应概念解释

    R-CNN --> FAST-RCNN --> FASTER-RCNN R-CNN: (1)输入测试图像: (2)利用selective search 算法在图像中从上到下提取2000个左 ...

  8. Asp.net动态生成表单

    control.ascx <%@ Control Language="C#" AutoEventWireup="true" CodeBehind=&quo ...

  9. MongoDB(三)-- 执行JS、界面工具

    一.执行Js脚本 1.开启mongod服务 2.连接mongodb客户端,./mongo --host 192.168.80.128 --port 27017 3.创建数据库:use testdb1 ...

  10. Nginx 访问控制

    根据 IP 限制访问: location /admin/ { allow 192.168.1.1; allow 192.168.1.2; deny all; } 根据正则限制访问: location ...