引言
前面提到了測試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,可以看到所有規則都被運作。
部落客:測試生财(一個不為996而996的測開碼農)
座右銘:專注測試開發與自動化運維,努力讀書思考寫作,為内卷的人生奠定财務自由。
内容範疇:技術提升,職場雜談,事業發展,閱讀寫作,投資理财,健康人生。
csdn:https://blog.csdn.net/ccgshigao
部落格園:https://www.cnblogs.com/qa-freeroad/
51cto:https://blog.51cto.com/14900374
微信公衆号:測試生财(定期分享獨家内容和資源)