SODBASE CEP学习(十):在线动态修改EPL规则
2015-05-09 10:00
316 查看
在实际项目中,常常会需要输入数据不断的条件下,在线修改规则。例如:交易策略中,以一定时间窗口的价格平均值和阈值比较决定交易行为。在时间窗口走到中间时,要修改阈值了。如果单纯的停掉这条EPL,修改,再启动,之前的时间窗口的数据就会丢失,即使不丢失,因为阈值变了,之前的中间结果也不能再用。这种情况下,要保证数据的不丢失,同时保证结果的可解释性,就需要用到SODBASECEP的hot swap在线修改规则功能。
前提条件是CEP模型中输入适配器不改变。SODSQL和输出适配器可以在线改变。要实现Hot Swap的CEP模型中只允许包含一个SODSQL语句。
(2)运行com.example.hotswap.HotSwapExample.java
(3)输出结果
(1)以Hot Swap模式启动EPL。要使用Hot Swap功能必须以此方式启动EPL。
(2)以Hot Swap模式停止EPL。EPL并没有真正停止,而是处于允许修改EPL了。
(3)以Hot Swap模式重启EPL。修改完EPL,启动新的EPL。
(2)和(3)之间的时间不能过长,导致输入累积过多而超过队列允许的最大长度。
另外,实现Hot Swap的EPL模型,如果同一时间点有许多数据,就在中途修改规则。为保证语义的完整性和不丢失结果数据,这一时间点的数据将按新的规则重新计算。所以可能在这一时间点产生重复结果数据。解决方法:在此EPL后级联一个Filter,这个Filter用Watermark去重输出。
以嵌入式方式使用Hot Swap功能的话,可以使用下面示例Java代码中的API。
注意:要给configuration/global.properties中maxqueuelength配置足够大,表示缓冲的事件数,能容得下hotswap切换过程中的事件。
以服务器方式使用Hot Swap功能时,则通过Web service接口或RESTful接口进行调用。
SODBASE CEP用于轻松、高效实施数据监测、监控类、实时交易类项目
。EPL语法见SODSQL写法与示例。图形化建模请使用SODBASE
Studio。嵌入式方式编程参见运行第一个EPL例子。与Storm集成参见EPL与Storm集成。
前提条件是CEP模型中输入适配器不改变。SODSQL和输出适配器可以在线改变。要实现Hot Swap的CEP模型中只允许包含一个SODSQL语句。
1.示例操作步骤
(1)下载J***A-API-Example-2.0.*.zip,导入Eclipse中(2)运行com.example.hotswap.HotSwapExample.java
(3)输出结果
2.工作原理
SODBASE CEP提供的在线修改规则接口有三个,需要配套使用。(1)以Hot Swap模式启动EPL。要使用Hot Swap功能必须以此方式启动EPL。
(2)以Hot Swap模式停止EPL。EPL并没有真正停止,而是处于允许修改EPL了。
(3)以Hot Swap模式重启EPL。修改完EPL,启动新的EPL。
(2)和(3)之间的时间不能过长,导致输入累积过多而超过队列允许的最大长度。
另外,实现Hot Swap的EPL模型,如果同一时间点有许多数据,就在中途修改规则。为保证语义的完整性和不丢失结果数据,这一时间点的数据将按新的规则重新计算。所以可能在这一时间点产生重复结果数据。解决方法:在此EPL后级联一个Filter,这个Filter用Watermark去重输出。
以嵌入式方式使用Hot Swap功能的话,可以使用下面示例Java代码中的API。
static public void main(String[] args) { GraphModelData graphModelData = GraphModelExecutorUtil .convertXmlToObject("files/hotswap/demoquery.xml"); graphModelData.getSODSQLs().clear(); //使用HotSwap时,查询名称demoquery、流名称stock与原模型保持不变 graphModelData .getSODSQLs() .add("CREATE QUERY demoquery SELECT T1._start_time_ AS id,T1.name AS name,T1.price AS price FROM T1:stock PATTERN T1 WHERE T1.price>80 WITHIN 0"); GraphModelExecutorI graphModelExecutor = new GraphModelExecutorImpl(); try { // 以Hot Swap模式启动EPL graphModelExecutor.executeGraphModelHotSwap(graphModelData, "demo"); Thread.sleep(10000); // 以Hot Swap模式停止EPL graphModelExecutor.stopGraphModelHotSwap(); System.out.println("restart hotswap "); Thread.sleep(10000); // 修改 SODSQL,输入不停止 graphModelData.getSODSQLs().clear(); graphModelData .getSODSQLs() .add("CREATE QUERY demoquery SELECT T1._start_time_ AS id,T1.name AS name,T1.price AS price FROM T1:stock PATTERN T1 WHERE T1.price>50 WITHIN 0"); } catch (InterruptedException e) { e.printStackTrace(); } // 以Hot Swap模式重启EPL graphModelExecutor.restartGraphModelHotSwap(graphModelData, "demo"); }
注意:要给configuration/global.properties中maxqueuelength配置足够大,表示缓冲的事件数,能容得下hotswap切换过程中的事件。
以服务器方式使用Hot Swap功能时,则通过Web service接口或RESTful接口进行调用。
SODBASE CEP用于轻松、高效实施数据监测、监控类、实时交易类项目
。EPL语法见SODSQL写法与示例。图形化建模请使用SODBASE
Studio。嵌入式方式编程参见运行第一个EPL例子。与Storm集成参见EPL与Storm集成。
相关文章推荐
- SODBASE CEP学习(五):流式计算中的类SQL语言EPL
- SODBASE CEP学习(十二):规则模板、阈值和用户界面
- SODBASE CEP学习(十三):EPL常用函数
- SODBASE CEP学习进阶篇(七)续:SODBASE CEP与Spark streaming集成-低延迟规则管理
- SODBASE CEP学习(四)续:类SQL语言EPL与Storm或jStorm集成-使用分布式缓存
- SODBASE CEP学习(四):类SQL语言EPL与Storm或jStorm集成
- SODBASE CEP学习(二):运行第一个EPL例子
- SODBASE CEP学习(四)续:类SQL语言EPL与Storm或jStorm集成-滑动窗口
- SODBASE CEP学习进阶篇(七):SODBASE CEP与Spark streaming集成
- SODBASE CEP学习进阶篇(五):与分布式缓存集成
- SODBASE CEP学习进阶篇(二):日志采集
- SODBASE CEP学习进阶篇(四):自己控制时钟和时间戳
- SODBASE CEP学习(十七):自定义函数开发
- SODBASE CEP学习进阶篇(六):实现反压和流限速
- SODBASE CEP学习(九):SODBASE View 实时图表显示和移动端消息
- SODBASE CEP学习进阶篇(一):除了Java还有C++
- SODBASE CEP学习(三):GUI建模工具SODBASE Studio和CEP服务器
- SODBASE CEP学习(十四):在Studio配置文件中编辑中文
- SODBASE CEP学习进阶篇(二)续:日志采集-Flume Syslog采集
- SODBASE CEP学习进阶篇(二)续:日志采集-Logstash、Kafka和CEP集成