Storm 和JStorm该如何理解
這篇文章給大家介紹 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该如何理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多重背包单调队列优化思路_动态规划入门—
- 下一篇: Linux中如何使用tmpfs内存文件系