Spark Streaming與Storm的對比
| 對比點 | Storm | Spark Streaming |
|---|---|---|
| 實時計算模型 | 純實時,來一條數(shù)據(jù),處理一條數(shù)據(jù) | 準(zhǔn)實時,對一個時間段內(nèi)的數(shù)據(jù)收集起來,作為一個RDD再處理 |
| 實時計算延遲度 | 毫秒級 | 秒級 |
| 吞吐量 | 低 | 高 |
| 事務(wù)機(jī)制 | 支持完善 | 支持,但不夠完善 |
| 健壯性/容錯性 | Zookeeper,Acker,非常強(qiáng) | Checkpoint,WAL,一般 |
| 動態(tài)調(diào)整并行度 | 支持 | 不支持 |
Spark Streaming與Storm的優(yōu)劣分析
事實上,Spark Streaming絕對談不上比Storm優(yōu)秀。這兩個框架在實時計算領(lǐng)域中,都很優(yōu)秀,只是擅長的細(xì)分場景并不相同。
Spark Streaming僅僅在吞吐量上比Storm要優(yōu)秀,而吞吐量這一點,也是歷來挺Spark Streaming,貶Storm的人著重強(qiáng)調(diào)的。但是問題是,是不是在所有的實時計算場景下,都那么注重吞吐量?不盡然。因此,通過吞吐量說Spark Streaming強(qiáng)于Storm,不靠譜。
事實上,Storm在實時延遲度上,比Spark Streaming就好多了,前者是純實時,后者是準(zhǔn)實時。而且,Storm的事務(wù)機(jī)制、健壯性 / 容錯性、動態(tài)調(diào)整并行度等特性,都要比Spark Streaming更加優(yōu)秀。
Spark Streaming,有一點是Storm絕對比不上的,就是:它位于Spark生態(tài)技術(shù)棧中,因此Spark Streaming可以和Spark Core、Spark SQL無縫整合,也就意味著,我們可以對實時處理出來的中間數(shù)據(jù),立即在程序中無縫進(jìn)行延遲批處理、交互式查詢等操作。這個特點大大增強(qiáng)了Spark Streaming的優(yōu)勢和功能。
Spark Streaming與Storm的應(yīng)用場景
對于Storm來說:
- 建議在那種需要純實時,不能忍受1秒以上延遲的場景下使用,比如實時金融系統(tǒng),要求純實時進(jìn)行金融交易和分析
- 此外,如果對于實時計算的功能中,要求可靠的事務(wù)機(jī)制和可靠性機(jī)制,即數(shù)據(jù)的處理完全精準(zhǔn),一條也不能多,一條也不能少,也可以考慮使用Storm
- 如果還需要針對高峰低峰時間段,動態(tài)調(diào)整實時計算程序的并行度,以最大限度利用集群資源(通常是在小型公司,集群資源緊張的情況),也可以考慮用Storm
- 如果一個大數(shù)據(jù)應(yīng)用系統(tǒng),它就是純粹的實時計算,不需要在中間執(zhí)行SQL交互式查詢、復(fù)雜的transformation算子等,那么用Storm是比較好的選擇
對于Spark Streaming來說:
- 如果對上述適用于Storm的三點,一條都不滿足的實時場景,即,不要求純實時,不要求強(qiáng)大可靠的事務(wù)機(jī)制,不要求動態(tài)調(diào)整并行度,那么可以考慮使用Spark Streaming
- 考慮使用Spark Streaming最主要的一個因素,應(yīng)該是針對整個項目進(jìn)行宏觀的考慮,即,如果一個項目除了實時計算之外,還包括了離線批處理、交互式查詢等業(yè)務(wù)功能,而且實時計算中,可能還會牽扯到高延遲批處理、交互式查詢等功能,那么就應(yīng)該首選Spark生態(tài),用Spark Core開發(fā)離線批處理,用Spark SQL開發(fā)交互式查詢,用Spark Streaming開發(fā)實時計算,三者可以無縫整合,給系統(tǒng)提供非常高的可擴(kuò)展性。