引言
前面提到了测试kuiper创建规则上限数遇到的问题,这里给大家分享一下如何批量创建多条规则。
分析
kuiper官网的性能测试结果中没有详细说明8000条规则的具体场景。这里我是这么理解:
首先有8000个流,其中800个流对应一个SELECT temperature FROM sourceX WHERE > 20这样的规则;另外7200个流对应SELECT temperature FROM sourceY WHERE temperature <= 20
这样如果我发送的MQTT消息中的temperature为(20,100]间的随机数,整个7200/8000=90%的数据被过滤掉,只有800/8000=10%的规则被命中。
测试场景构建
创建两个流:demo1和demo2
#进入容器
docker exec -it kuiper /bin/bash
#创建流demo1
bin/kuiper create stream demo1 '(temperature float, humidity bigint) WITH (FORMAT="JSON", DATASOURCE="demo1")'
#创建流demo2
bin/kuiper create stream demo2 '(temperature float, humidity bigint) WITH (FORMAT="JSON", DATASOURCE="demo2")'
然后分别创建7200条规则rule1(SELECT temperature FROM sourceY WHERE temperature <= 20)和800条规则rule2(SELECT temperature FROM sourceY WHERE temperature >20)
文件:rule1
{
"sql": "SELECT * FROM demo1 WHERE temperature <= 20",
"actions": [
{
"log": {}
}
]
}
文件:rule2
{
"sql": "SELECT * FROM demo2 WHERE temperature > 20",
"actions": [
{
"log": {}
}
]
}
编写脚本,创建7200条规则1和800条规则2
creatRule.sh
#!/bin/sh
#拷贝规则到kuiper容器内部
docker cp rule1 kuiper:/go/kuiper/_build/kuiper-1.1.1-linux-x86_64/bin
docker cp rule2 kuiper:/go/kuiper/_build/kuiper-1.1.1-linux-x86_64/bin
for i in `seq 1 8000`
do
ruleId=$i
echo $ruleId
if [ $i -le 7200 ];then
#前7200条规则rule1
docker exec -it kuiper /bin/sh -c "bin/kuiper create rule rule_iot_${ruleId} -f bin/rule1"
else
#前7200条规则rule2
docker exec -it kuiper /bin/sh -c "bin/kuiper create rule rule_iot_${ruleId} -f bin/rule2"
fi
done
执行:sh creatRule.sh
预计几分钟后执行完毕,通过curl http://localhost:9081/rules,可以看到所有规则都被运行。
博主:测试生财
座右铭:专注测试与自动化,致力提高研发效能;通过测试精进完成原始积累,通过读书理财奔向财务自由。
csdn:https://blog.csdn.net/ccgshigao
来源:oschina
链接:https://my.oschina.net/u/4411637/blog/4949017