背景
国内物联网行业用的比较多的接入平台非EMQ莫属了,其提供了整套的行业解决方案,包括:边缘侧的设备接入及边缘侧规则引擎eKuiper。由于前期对于边缘轻量级规则引擎我们也做了相应的技术选型,比较偏向于Drools。也对Drools进行了相关的性能测试,比较符合我们的业务场景。这次正好与EMQ厂商有比较深入的交流,也想对比下两者的性能。我们主要对数据转发场景进行了对比。业务上很简单,就是对设备上报数据,进行简单的过滤然后发送给第三方应用。比如:温度的阈值判断、标签的过滤等。
环境准备
8c 16g普通虚拟机。使用eKuiper比较简单,直接定义数据流(source),然后定义处理转发逻辑SQL,最后定义输出(sink)。按照官方文档安装好eKuiper和EMQ。
定义数据流(source)
./bin/kuiper create stream rawdata '(orgId string, orgKey string, productKey string, productLabels string, deviceKey string, deviceLabels string, requestTime string, requestIp string) WITH (FORMAT="JSON", DATASOURCE="rawdata",SHARED="true",TIMESTAMP="ts" )'
定义转发逻辑SQL
bin/kuiper create rule dataForward -f /data/rules/fr-124.txt
fr-124.txt的内容如下
{
"sql": "SELECT orgId,orgKey,productKey,deviceKey,requestTime,requestIp,productLabels,deviceLabels from rawdata where orgId =\"124\" and indexof(productLabels,\"103\")!=-1",
"actions": [{
"nop": {}
}]
}
测试的场景
1000规则,1000匹配。数据流转:emq--->eKuiper。以600tps向tmq发送数据,机器的CPU彪升到60%以上,且居高不下。结合官方的测试结果也可以看出,eKuiper确实是比较消耗CPU的。另外,规则引擎的吞吐量计算是结合触发的规则数来计算的。
比如:发送消息600TPS,1000规则完全都匹配上,对于规则引擎来说qps为:600*1000=60k。
网友评论