Esper学习之一:Esper介绍

标签: esper 学习 esper | 发表时间:2013-08-11 16:10 | 作者:luonanqin
出处:http://blog.csdn.net

       由于项目需要,我开始了学习Esper的任务。刚开始觉得他是个很高级的东西,学了一段时间后发现他确实是很高级的东西。不过貌似在国内的应用很少,网上都查不到什么资料的,所以我觉得在博客里写一下自己的学习的收获,一是总结所学知识点,二是分享给更多的学习者,毕竟好东西不能这样被埋没了。今天就先来简单介绍一下Esper是什么玩意儿。

       说到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的核心内容,对于它的讲解有三四百页的英文文档,所以之后我会慢慢向大家细细说明的。

下面就简单写个列子给大家看看吧。场景是计算10秒内苹果的平均价格

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/ 里面有很多例子可以研究一下。

下节会讲解一下他的一些基本用法。敬请关注



作者:luonanqin 发表于2013-8-11 16:10:44 原文链接
阅读:65 评论:0 查看评论

相关 [esper 学习 esper] 推荐:

Esper学习之一:Esper介绍

- - CSDN博客云计算推荐文章
       由于项目需要,我开始了学习Esper的任务. 刚开始觉得他是个很高级的东西,学了一段时间后发现他确实是很高级的东西. 不过貌似在国内的应用很少,网上都查不到什么资料的,所以我觉得在博客里写一下自己的学习的收获,一是总结所学知识点,二是分享给更多的学习者,毕竟好东西不能这样被埋没了. 今天就先来简单介绍一下Esper是什么玩意儿.

Esper入门介绍

- - ITeye博客
        Esper的官网定义: Esper is a component for CEP and ESP applications,中文意思是:Esper是用于CEP(复杂事件处理)和ESP(事件流处理)应用程序的组件.         Esper是一个Java开发的事件流处理(ESP:Event Stream Processing)和复杂事件处理(CEP:Complex Event Processing)引擎.

Esper入门例子(二)

- - ITeye博客
         Esper入门例子.       说到Esper,不得不说一下CEP. CEP即Complex Event Process,中文意思就是“复杂事件处理”. 听起来好像很复杂,实际上就是基于事件流进行数据处理,把要分析的数据抽象成事件,然后将数据发送到 CEP引擎,引擎就会根据事件的输入和最初注册的处理模型,得到事件处理结果.

iptables NAT 学习

- - BlogJava-首页技术区
为了搞清楚iptables NAT的过程,做了这个实验. 使用了1台双网卡服务器和1台单网卡服务器,2个网段. 1.       为了看到调度服务器上的数据转发过程,首先在调度服务器上分出内核的debug日志:. l 在/etc/rsyslog.conf最后增加:kern.debug /var/log/iptables.log.

Servlet Filter 学习

- - CSDN博客架构设计推荐文章
最近在研究CAS , CAS 中的Servlet Filter 不太熟悉, 所以花了点时间学下了下这部分的知识, 分成以下几部分 学习. Servlet Filter  的功能和用法. Servlet Filter 顺序的注意事项. A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both.

mongo 学习

- - CSDN博客系统运维推荐文章
mongod 启动参数详解:. master 启动: ./mongod --dbpath /data/db/master --logpath /data/db/master.log --logappend  --fork --port 2717 --master --oplogSize 64 . slave 启动: ./mongod  --dbpath /data/db/slave  --logpath  /data/db/slaver.log --logappend  --fork  -port 27018  --slave --slavedelay 5 --autoresync --source localhost:27017  .

pushlet 学习

- - 企业架构 - ITeye博客
转自: http://blog.csdn.net/houpengfei111/article/details/7498481.     pushlet是一种comet实现,在servlet机制下,数据从server端的java对象直接推送(push)到(动态)HTML页面,而无需任何java applet或者插件的帮助.

Storm Trident 学习

- - 小火箭
Storm支持的三种语义:. 至少一次语义的Topology写法. 参考资料: Storm消息的可靠性保障 Storm提供了Acker的机制来保证数据至少被处理一次,是由编程人员决定是否使用这一特性,要使用这一特性需要:. 在Spout emit时添加一个MsgID,那么ack和fail方法将会被调用当Tuple被正确地处理了或发生了错误.

「学习笔记-Linux」学习Shell Script

- - CSDN博客系统运维推荐文章
学习Shell Script. 1 什么是Shell Scipt. 2.2 例2 按日期建立相似名字的文件. 3.2.4 整数,字符串,多重条件判断. 4 Shell Script 参数. 5.2 if else 结构. 8 shell script的追踪与Debug. 1 什么是Shell Scipt.

真正的学习

- Yuli - 左岸读书_blog
前天突然发现,身边很多人在当年读书时有神话般的表现,比方说一个哥们小学、初中与高中永远是全校第一名. 比方说,高中的同桌在一次期末考试前生病,在家休养一个月,回来时距离考试仅三四天时间,但没想到他一鸣惊人,从以前的十二三名跃居到第四名. 不过,所有这些神话,都远不如一个看起来有些愚笨的故事令我感动.