Storm概念学习系列之storm的特性
?
不多說,直接上干貨!
?
?
storm的特性
Storm 是一個開源的分布式實時計算系統(tǒng),可以簡單、可靠地處理大量的數(shù)據(jù)流。 Storm支持水平擴展,具有高容錯性,保證每個消息都會得到處理,而且處理速度很快(在一個小集群中,每個節(jié)點每秒可以處理數(shù)以百萬計的消息)。 Storm 的部署和運維都很便捷,而且更為重要的是,可以使用任意編程語言來開發(fā)應(yīng)用。
?
?
?
下面介紹 Storm 的特點
(1)編程模型簡單
在大數(shù)據(jù)處理方面, Hadoop 為開發(fā)者提供了 MapReduce 原語,使并行批處理程序變得非常簡單和優(yōu)美。同樣, Storm 也為大數(shù)據(jù)的實時計算提供了一些簡單優(yōu)美的原語,這大大降低了開發(fā)并行實時處理任務(wù)的復(fù)雜性,可以快速、高效地開發(fā)應(yīng)用。
(2)可擴展
在 Storm 集群中真正運行 Topology 的主要有 3 個實體:工作進程、線程和任務(wù)。 Storm集群中的每臺機器都可以運行多個工作進程,每個工作進程又可創(chuàng)建多個線程,每個線程可以執(zhí)行多個任務(wù),任務(wù)是真正進行數(shù)據(jù)處理的實體,開發(fā)的 Spout、 Bolt 就是作為一個或者多個任務(wù)的方式執(zhí)行的。因此,計算任務(wù)在多個線程、進程和服務(wù)器之間并行進行,支持靈活的水平擴展。
(3)高可靠性
Storm 可以保證 Spout 發(fā)出的每條消息都能被“完全處理”,這也是直接區(qū)別于其他實時系統(tǒng)的地方,如 S4。
?
?
注意:
Spout 發(fā)出的消息后續(xù)可能會觸發(fā)產(chǎn)生成千上萬條消息,可以形象地理解為一棵消息樹,其中 Spout 發(fā)出的消息為樹根, Storm 會跟蹤這棵消息樹的處理情況,只有當(dāng)這棵消息樹中的所有消息都被處理了,Storm 才會認為 Spout 發(fā)出的這個消息已經(jīng)被“完全處理”。如果這棵消息樹中的任何一個消息處理失敗了,或者整棵消息樹在限定的時間內(nèi)沒有“完全處理”,那么 Spout 發(fā)出的消息就會重發(fā)。
考慮到盡可能減少內(nèi)存的消耗, Storm 并不會跟蹤消息樹中的每個消息,而是采用了一些特殊的策略,它把消息樹當(dāng)作一個整體來跟蹤,對消息樹中所有消息的唯一 ID 進行異或計算,通過是否為 0 來判定 Spout 發(fā)出的消息是否被“完全處理”,這極大地節(jié)約了內(nèi)存并簡化了判定邏輯,后面會詳細介紹這種機制。
在這種模式下,每發(fā)送一個消息,都會同步發(fā)送一個 ack/fail,對于網(wǎng)絡(luò)的帶寬會有一定的消耗,如果對可靠性要求不高,則可使用不同的 emit 接口關(guān)閉該模式。
上面所說的, Storm 保證了每個消息至少被處理一次,但是對于有些計算場合,會嚴(yán)格要求每個消息只被處理一次, Storm 的 0.7.0 引入了事務(wù)性拓撲,解決了這個問題,后面章節(jié)會詳述。
?
(4)高容錯性
如果在消息處理過程中出了一些異常, Storm 會重新安排這個出問題的處理單元。 Storm保證一個處理單元永遠運行(除非顯式殺掉該處理單元)。當(dāng)然,如果處理單元中存儲了中間狀態(tài),那么當(dāng)處理單元重新被 Storm 啟動時,需要將自身處理的中間狀態(tài)恢復(fù)。
?
(5)支持多種編程語言
除了用 Java 實現(xiàn) Spout 和 Bolt,還可以使用其他編程語言來完成這項工作,這一切得益于 Storm 的多語言協(xié)議。多語言協(xié)議是 Storm 內(nèi)部的一種特殊協(xié)議,允許 Spout 或 Bolt 使用標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出來傳遞消息,傳遞的消息為單行文本或多行 JSON 編碼的格式。
Storm 支持多語言編程主要是通過 ShellBolt、 ShellSpout 和 ShellProcess 這些類來實現(xiàn)的,這些類都實現(xiàn)了 IBolt 和 ISpout 接口,以及讓 Shell 通過 Java 的 ProcessBuilder 類來執(zhí)行腳本或者程序的協(xié)議。
可以看到,采用這種方式,每個 Tuple 在處理時都需要進行 JSON 的編解碼,因此在吞吐量上會有較大影響。
(6)支持本地模式
Storm 有一種“本地模式”,也就是在進程中模擬一個 Storm 集群的所有功能,以本地模式運行 Topology 與在集群上運行 Topology 類似,這對于開發(fā)和測試來說非常有用。
(7)高效
用 ZeroMQ 作為底層消息隊列,保證消息能被快速處理。
?
轉(zhuǎn)載于:https://www.cnblogs.com/zlslch/p/5989260.html
總結(jié)
以上是生活随笔為你收集整理的Storm概念学习系列之storm的特性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡网上支付算免年费刷卡次数吗?怎么查
- 下一篇: 一般面试题