Storm 和JStorm该如何理解
這篇文章給大家介紹 Storm 和JStorm該如何理解,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
簡單的概述Storm就是:JStorm 比Storm更穩(wěn)定,更強大,更快,Storm上跑的程序,一行代碼不變可以運行在JStorm上。直白的將JStorm是阿里巴巴的團隊基于Storm的二次開發(fā)產(chǎn)物,相當(dāng)于他們的Tengine是基于Ngix開發(fā)的一樣。
現(xiàn)有Storm無法滿足一些需求
-
現(xiàn)有storm調(diào)度太簡單粗暴,無法定制化
-
Storm 任務(wù)分配不平衡
-
RPC OOM一直沒有解決
-
監(jiān)控太簡單
-
對ZK 訪問頻繁
JStorm相比Storm更穩(wěn)定
-
Nimbus 實現(xiàn)HA:當(dāng)一臺nimbus掛了,自動熱切到備份nimbus
-
原生Storm RPC:Zeromq 使用堆外內(nèi)存,導(dǎo)致OS 內(nèi)存不夠,Netty 導(dǎo)致OOM;JStorm底層RPC 采用netty + disruptor保證發(fā)送速度和接受速度是匹配的
-
新上線的任務(wù)不會沖擊老的任務(wù):新調(diào)度從cpu,memory,disk,net 四個角度對任務(wù)進行分配,已經(jīng)分配好的新任務(wù),無需去搶占老任務(wù)的cpu,memory,disk和net
-
Supervisor主線
-
Spout/Bolt 的open/prepar
-
所有IO, 序列化,反序列化
-
減少對ZK的訪問量:去掉大量無用的watch;task的心跳時間延長一倍;Task心跳檢測無需全ZK掃描。
JStorm相比Storm調(diào)度更強大
-
徹底解決了storm 任務(wù)分配不均衡問題
-
從4個維度進行任務(wù)分配:CPU、Memory、Disk、Net
-
默認一個task,一個cpu slot。當(dāng)task消耗更多的cpu時,可以申請更多cpu slot
-
默認一個task,一個memory slot。當(dāng)task需要更多內(nèi)存時,可以申請更多內(nèi)存slot
-
默認task,不申請disk slot。當(dāng)task 磁盤IO較重時,可以申請disk slot
-
可以強制某個component的task 運行在不同的節(jié)點上
-
可以強制topology運行在單獨一個節(jié)點上
-
可以自定義任務(wù)分配,提前預(yù)約任務(wù)分配到哪臺機器上,哪個端口,多少個cpu slot,多少內(nèi)存,是否申請磁盤
-
可以預(yù)約上一次成功運行時的任務(wù)分配,上次task分配了什么資源,這次還是使用這些資源
JStorm相比Storm性能更好
JStorm 0.9.0 性能非常的好,使用netty時單worker 發(fā)送最大速度為11萬QPS,使用zeromq時,最大速度為12萬QPS。
-
JStorm 0.9.0 在使用Netty的情況下,比Storm 0.9.0 使用netty情況下,快10%, 并且JStorm netty是穩(wěn)定的而Storm 的Netty是不穩(wěn)定的
-
在使用ZeroMQ的情況下, JStorm 0.9.0 比Storm 0.9.0 快30%
性能提升的原因:
-
Zeromq 減少一次內(nèi)存拷貝
-
增加反序列化線程
-
重寫采樣代碼,大幅減少采樣影響
-
優(yōu)化ack代碼
-
優(yōu)化緩沖map性能
-
Java 比clojure更底層
JStorm的其他優(yōu)化點
-
資源隔離。不同部門,使用不同的組名,每個組有自己的Quato;不同組的資源隔離;采用cgroups 硬隔離
-
Classloader。解決應(yīng)用的類和Jstorm的類發(fā)生沖突,應(yīng)用的類在自己的類空間中
-
Task 內(nèi)部異步化。Worker 內(nèi)部全流水線模式,Spout nextTuple和ack/fail運行在不同線程
總結(jié)
以上是生活随笔為你收集整理的Storm 和JStorm该如何理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多重背包单调队列优化思路_动态规划入门—
- 下一篇: Linux中如何使用tmpfs内存文件系