zoukankan      html  css  js  c++  java
  • Esper学习之一:Esper介绍

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

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

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

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

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

  • 相关阅读:
    1. 两数之和
    RabbitMQ主题交换机
    RabbitMQ路由
    RabbitMQ发布订阅
    RabbitMQ简介和安装
    55. 跳跃游戏
    63. 不同路径 II
    62. 不同路径
    6. Z 字形变换
    sql注入攻击与防御第一章(笔记)
  • 原文地址:https://www.cnblogs.com/yudar/p/4872559.html
Copyright © 2011-2022 走看看