1、数据转发
基于Flink Table Api &SQL实现,以写SQL的方式,实现IOT平台数据的转发,支持对数据按照产品key、设备key、产品标签、设备标签来过滤。
2、场景联动
基于Flink CEP来实现。主要包括:触发条件配置、执行条件配置、执行动作配置三部分。支持IOT设备间的联动,比如:当室内温度大于30℃的时候,自动开启空调。
1、资源占用大
规则需要独立运行,至少做到租户级别的隔离。那么就需要一个租户一个job,Flink 一个job的占用内存约1G左右。无法支撑大量租户。
2、启停耗时长
尽管使用了session模式来启停job,但是整体耗时还是非常大。
3、无法动态加载
规则一旦更改,需要重启整个job。这是flink机制来决定的,flink会先在本地生成描述任务的有向无环图,然后提交给jobmanager。规则变了之后,还是需要在本地进行编译,然后提交给jobmanager。
4、组件依赖多
flink on yarn模式:需要hdfs、yarn和zookeeper。
由于存在以上的问题,所以边缘部署的时候由于资源受限,不能采用此模式。于是基于Drools来实现边缘侧的规则引擎方案应运而生。采用JAVA API方式集成Drools,能很好的解决我们的所有痛点。
1、定义统一的规则生成接口。
2、以数据转发为例,需要支持Flink SQL和Drools。提供两个不同的实现。
3、根据模板生成对应的规则信息,规则信息账户间隔离。
4、规则信息存储在MYSQL中,方便后续提供统一的规则查询服务。或者存储在分布式文件系统中。
1、规则信息按照orgId%16,均匀分配的不同节点上执行。
2、执行节点启动的时候,加载与自己节点相关规则信息。
3、直接通过JAVA API的方式集成Drools。
1)规则变更,以规则粒度通知规则调度程序。变更规则的信息发送到kafka的rule_notify。
规则信息包括:org_id、rule_id等
2)规则调度程序监听topic:rule_notify,判断此规则是否属于本节点,如果属于则通过rule_id
调用获取规则信息接口,得到规则的drl详情信息,然后本节点之前的rule删除,加载新规则。
3)整个流程为动态加载,不需要重启。
JBoss Drools的可视化规则设计工具包在Drools 4.0的时候叫drools-jbrms。drools-jbrms需要JDK1.5或以上版本,本文以drools 4.0.7的drools-jbrms包在Tomcat 6.0下部署为例。
第1步
按照JBoss官方提供的文档处理
删除war包中的el-api.jar
删除Tomcat的lib目录下的jsf-api.jar和jsf-impl.jar(本来不存在就不用管了)
将下载后的jboss_jsf_libs.zip解压到Tomcat的lib目录下
第2步
启动Tomcat。drools-jbrms会在Tomcat的bin目录下新建repository目录(包括很多子目录),同时会报无法启动的异常。异常信息为Caused by: javax.jcr.RepositoryException: internal error: failed to read custom node type definitions stored in custom_nodetypes.xml: Premature end of file.: Premature end of file.
(注意,这里我是在Tomcat/bin目录下用startup.bat启动的,如果不是这种方式repository的位置可能有所不同)
第3步
将本文提供的custom_nodetypes.xml覆盖Tomcat下的bin/repository/repository/nodetypes的同名文件。
第4步
重新启动
原因:drools-jbrms包含的某些功能在Tomcat下有问题,生成custom_nodetypes.xml时没有生成文件内容,所以报错。从网上查询,最迟2007年就有人报这个问题了。看来JBoss的对于非JBoss应用服务器的兼容问题考虑不多。
注:本文提供的custom_nodetypes.xml为drools-jbrms在JBoss应用服务器部署时生成的,内容如下:
mix:referenceablent:hierarchyNodedrools:categoryNodeTypedrools:versionableNodeTypent:folderfalsedrools:versionableAssetFolderdrools:versionableNodeTypedrools:categoryNodeTypefalsemix:versionablent:folderdrools:versionableNodeTypemix:versionablent:hierarchyNodedrools:stateNodeTypemix:referenceablent:hierarchyNode
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)