引言
前面提到了測試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