您好,登錄后才能下訂單哦!
這篇文章給大家介紹 Storm 和JStorm該如何理解,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
簡單的概述Storm就是:JStorm 比Storm更穩定,更強大,更快,Storm上跑的程序,一行代碼不變可以運行在JStorm上。直白的將JStorm是阿里巴巴的團隊基于Storm的二次開發產物,相當于他們的Tengine是基于Ngix開發的一樣。
現有Storm無法滿足一些需求
現有storm調度太簡單粗暴,無法定制化
Storm 任務分配不平衡
RPC OOM一直沒有解決
監控太簡單
對ZK 訪問頻繁
JStorm相比Storm更穩定
Nimbus 實現HA:當一臺nimbus掛了,自動熱切到備份nimbus
原生Storm RPC:Zeromq 使用堆外內存,導致OS 內存不夠,Netty 導致OOM;JStorm底層RPC 采用netty + disruptor保證發送速度和接受速度是匹配的
新上線的任務不會沖擊老的任務:新調度從cpu,memory,disk,net 四個角度對任務進行分配,已經分配好的新任務,無需去搶占老任務的cpu,memory,disk和net
Supervisor主線
Spout/Bolt 的open/prepar
所有IO, 序列化,反序列化
減少對ZK的訪問量:去掉大量無用的watch;task的心跳時間延長一倍;Task心跳檢測無需全ZK掃描。
JStorm相比Storm調度更強大
徹底解決了storm 任務分配不均衡問題
從4個維度進行任務分配:CPU、Memory、Disk、Net
默認一個task,一個cpu slot。當task消耗更多的cpu時,可以申請更多cpu slot
默認一個task,一個memory slot。當task需要更多內存時,可以申請更多內存slot
默認task,不申請disk slot。當task 磁盤IO較重時,可以申請disk slot
可以強制某個component的task 運行在不同的節點上
可以強制topology運行在單獨一個節點上
可以自定義任務分配,提前預約任務分配到哪臺機器上,哪個端口,多少個cpu slot,多少內存,是否申請磁盤
可以預約上一次成功運行時的任務分配,上次task分配了什么資源,這次還是使用這些資源
JStorm相比Storm性能更好
JStorm 0.9.0 性能非常的好,使用netty時單worker 發送最大速度為11萬QPS,使用zeromq時,最大速度為12萬QPS。
JStorm 0.9.0 在使用Netty的情況下,比Storm 0.9.0 使用netty情況下,快10%, 并且JStorm netty是穩定的而Storm 的Netty是不穩定的
在使用ZeroMQ的情況下, JStorm 0.9.0 比Storm 0.9.0 快30%
性能提升的原因:
Zeromq 減少一次內存拷貝
增加反序列化線程
重寫采樣代碼,大幅減少采樣影響
優化ack代碼
優化緩沖map性能
Java 比clojure更底層
JStorm的其他優化點
資源隔離。不同部門,使用不同的組名,每個組有自己的Quato;不同組的資源隔離;采用cgroups 硬隔離
Classloader。解決應用的類和Jstorm的類發生沖突,應用的類在自己的類空間中
Task 內部異步化。Worker 內部全流水線模式,Spout nextTuple和ack/fail運行在不同線程
關于 Storm 和JStorm該如何理解就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。