MOQL做为一款基于Java的面向内存对象的过滤、查询及统计分析工具,有非常丰富的应用场景。复杂事件处理就是其应用场景之一。MOQL工程在迁移到GitHub之后,进行了一次大的调整。整个项目被拆分成了moql-core和moql-cep两个模块。其中moql-core即原来的moql主工程,而moql-cep则是基于moql开发的复杂事件处理模块,其功能类似Esper,但待处理的数据是无模式的。所谓无模式即不用像Esper一样,事先指定待处理的数据的模式,对于事件类型比较多的应用场景更适用,开发也更简单。

示例代码如下(注:该代码在moql-cep的测试类中可以找到):

//构造测试数据,测试数据为对象数组列表。数据共5*20=100条
List<Object[]> dataList = DataSimulator.createDataList(5, 20);
//构造复杂事件处理规则
CeperMetadata metadata = new CeperMetadata();
//设置规则名
metadata.setName("cep1");
//设置规则的窗口类型,关于规则支持的窗口类型见后文
metadata.setWinType(SlideWindowEnum.SW_BATCH.name());
/*基于Moql语法设置匹配规则。该规则含义为以事件数组的0下标索引值做名字,对下标为2的值
*求和。当有任何一组值的和大于100时,则匹配规则,并输出name和sum两个字段。注:from
*关键字后跟两个evt,第一个表示事件流的名字,第二个表示别名。Moql语法要求必须有别名,
*参见Moql相关语法文档。
*/
metadata.setMoql("select evt[0] name, sum(evt[2]) sum from evt evt group by name having sum > 100");
//设置窗口桶的个数
metadata. setBucketCount(5);
/*设置桶大小,每个桶可以缓存的数据条目。每个窗口由bucketCount个桶组成,其容量为
* bucketCount*bucketSize。每当窗口滑动时,引发计算并按桶进行数据淘汰,即桶的大小约定了
*窗口的数据处理粒度。该示例表示窗口最多可以容纳50/10=5个桶,当第6桶数据来时,第1桶被
*淘汰,只保留最新的5桶数据
*/
metadata.setBucketSize(10);
/*创建复杂事件规则对象,其中参数evt表示传给ceper的事件流的名字。该名字是规则定义时
*moql语句中from后的表被命名为evt的原因。
*/
Ceper<Object[]> ceper = new MoqlCeper<Object[]>("evt", metadata);
//设置事件监听器,当有匹配条件的事件发生时通过监听器可以订阅到
ceper.addCepListener(new CepPrintListener());
//开始进行复杂事件处理
for(Object[] data : dataList) {ceper.operate(data);
}

moql-cep目前支持4种滑动窗口类型。每种窗口都是由bucketCount个桶(bucket)组成,其容量为 bucketCount*bucketSize。桶表示了窗口的最小处理粒度,每当有新的一桶数据产生时,就会引发一次计算(窗口已满的情况下),同时会淘汰掉最老的那桶数据。

Ø  BatchWindow

    批处理窗口,以事件的数目做为窗口滑动的触发条件。bucketCount表示窗口能容纳的桶的总量;bucketSize表示一桶能容纳的事件的总量。

Ø  TimeWindow

    时间窗口,以时间做为窗口滑动的触发条件。bucketCount表示窗口能容纳的桶的总量;bucketSize表示每桶能够容纳多长时间的事件,单位秒。

Ø  BatchAndTimeWindow

    批处理与时间并行窗口,同时以事件数及时间做为窗口滑动的触发条件,即那个条件先满足,就用哪个条件触发窗口滑动及相关计算。bucketCount与bucketSize参数的相关含义见BatchWindow。另外,在上例的代码中CeperMetadata还有一个Map类型的parameters属性没有介绍,各窗口可以通过该属性设置窗口运行时特有的参数。BatchAndTimeWindow有一个名为win.batchandtime.timebucketsize的属性,该属性约定了时间窗口的大小。这意味着,当一个桶只要满足bucketSize属性或者timebucketsize属性设定的任一条件就会触发窗口滑动。

Ø  MatcherWindow

    值匹配窗口,即当某个指定值发生改变时引发窗口滑动。bucketCount表示窗口能容纳的桶的总量;bucketSize在此时没有实际意义,设置为0。MatcherWindow有一个名为win.matcher.expression的参数,该参数是一个表达式,符合Moql中Operand的相关定义。当用该表达式在事件流中计算出的值发生变化时,产生一个以新值为当前值的新桶,并触发窗口的滑动和相关计算。如:当对存储后的数据进行事件流回放时,由于事件已不能正常反映实时的流动情况,此时可以用该窗口对事件中的时间字段按秒进行匹配,可模拟出实时流动时的计算效果。

 

    有没讲清楚的,可以给我留言。MOQL工程换了新地址,地址如下:

项目地址:https://github.com/colorknight/moql

MOQL-复杂事件处理(CEP)相关推荐

  1. 【flink】flink 复杂事件处理 CEP

    @[ 1.概述 转载:Flink系列 13. 复杂事件处理 CEP 请到原文查看... 1. 什么是 CEP? CEP 是 Flink 中实现的复杂事件处理库,(Complex Event Proce ...

  2. 【金融/交易】基于CEP的量化交易平台建设

    转自: http://www.finesys.com.cn/news/html/?453.html 1   前言 1.1 招商证券量化交易平台概述 量化交易是将投资策略用数量化模型固化,并运 用计算机 ...

  3. Day79_Flink(五) FlinkSQL和CEP

    课程大纲 课程内容 学习效果 掌握目标 FlinkSQL FlinkTable 掌握 FlinkSQL 掌握 FlinkCEP FlinkCEP 掌握 任务性能优化 operator chain 掌握 ...

  4. Flink CEP结合案例详解

    1.介绍 FlinkCEP是在Flink之上实现的复杂事件处理(CEP)库.它允许您在无穷无尽的事件流中检测事件模式,使您有机会掌握数据中重要的内容.通常会用来做一些用户操作APP的日志风控策略等多种 ...

  5. Siddhi cep

    1.基本介绍 Siddhi 提供以下功能, 流式数据分析 为分析操作员提供编排数据流.计算分析和检测 来自多个不同实时数据源的事件数据模式的软件,以允许开发人员构建能够实时感知.思考和行动的应用程序. ...

  6. 「事件架构」ESP和CEP有什么区别?

    有些人可能想知道为什么有两种事件处理方式:事件流处理(ESP)和复杂事件处理(CEP).这篇文章的最初版本是我在13年前写的.当然,ESP工具也随着时间的推移而改变. 2006年的一天,一位罗伯特·米 ...

  7. lambdas_借助Java 8和lambdas,可以一起使用AssertJ和Awaitility

    lambdas AssertJ和Awaitility是在自动代码测试中使用的两个我最喜欢的工具. 不幸的是直到最近,还不能一起使用它. 但是随后Java 8进入了游戏,几十行代码足以使其在Awaili ...

  8. 百信银行基于 Apache Hudi 实时数据湖演进方案

    简介:本文介绍了百信银行实时计算平台的建设情况,实时数据湖构建在 Hudi 上的方案和实践方法,以及实时计算平台集成 Hudi 和使用 Hudi 的方式. 本文介绍了百信银行实时计算平台的建设情况,实 ...

  9. 饿了么EMonitor演进史

    简介:可观测性作为技术体系的核心环节之一,跟随饿了么技术的飞速发展,不断自我革新. 序言 时间回到2008年,还在上海交通大学上学的张旭豪.康嘉等人在上海创办了饿了么,从校园外卖场景出发,饿了么一步一 ...

最新文章

  1. 查看CentOS的网络带宽出口
  2. 吉大c 语言程序设计奥鹏作业,吉大20春学期《可编程控制器》在线作业一百分...
  3. Rsync 基本安装及同步(一)
  4. 了解员工工作的四种方法
  5. c++学习笔记之基础篇
  6. Tensorflow入门--图与会话
  7. 2019年Java Web学习笔记目录
  8. C# .net基于Http实现web server(web服务)
  9. Calico 的默认连通性 - 每天5分钟玩转 Docker 容器技术(69)
  10. 为什么开发环境如此之乱
  11. 水氢发动机应该叫氢能发动机、铝水制氢发动机
  12. vue3 使用echarts
  13. 用Python爬取QQ空间说说和相册!还不让我访问!
  14. ijkplayer 代码走读之 播放器网络数据读取过程详解2
  15. 基于JavaWeb实现的问卷调查系统
  16. Pytorch学习笔记7——自定义数据集
  17. dwm.exe(桌面窗口管理器)占用内存过大解决办法
  18. 绿地控股2020年净利润下滑约7%,销售金额同比减少7.7%
  19. 【哈希】购物券(bday)
  20. 前端常见问题以及处理方式 - - - (九) ES6中的set和map(map篇)

热门文章

  1. POJ 2871 整数奇偶排序
  2. jupyter notebook + 服务器中docker 使用配置
  3. ROS外接usb摄像头标定方法
  4. 远程linux服务器中安装jupyter通过本地浏览器访问使用
  5. tensorflow分类的loss函数_Tensorflow Keras的loss函数总结
  6. winform定义数据源名称_WinForm中使用CrystalReport水晶报表——基础,分组统计,自定义数据源...
  7. 计算机组成原理 陈泽,计算机组成原理 课程设计计算机组成原理 课程设计.doc...
  8. 被调用的对象已与其客户端断开连接 win10_【完整案例】基于Socket开发TCP传输客户端...
  9. 混合高斯模型_大数据小白入门高斯混合模型(GMM)聚类算法
  10. pyzabbix 删除触发器_zabbix设置邮件报警, Zabbix常用Key值, zabbix触发器表达式详解, zabbix制作自己模板...