Storm基本概念

2021-07-31 15:22:58 字數 2867 閱讀 9842

原文:

寫在前面的話:

請允許我廢話幾句。這個系列的文章發布的時間是在我完成了storm的專案開發之後才找出來時間寫的,在研究storm過程中,國內較好的參考文章實在有限,大多是入門和概念剖析。storm的googlegroup對於新手來說實在不友好。有經驗人士都不願意回答新手的一些「愚蠢」的問題。現在因為storm移交了apache,正式啟用了apachemailgroup就更不友好了……中間我走過不少彎路,自己摸索和看原始碼。雖然說自己理解的才是最深刻的,但是我覺得還是分享出來,減少大家走彎路時間,把注意力更多的放在storm的應用**上。或許文章中會有錯誤,或許文章會「太監」,或許你只是遇到了一篇筆記而已。

介紹文章內寫太多基本原理性東西,反而容易讓人暈,所以在本篇中,只是點出基本概念模型,同時share一些基本資料給能力強的同學去研究。

storm是由twitter在2011開源出來的產品,現在貢獻給了apache。

1. storm官方主頁: 看上去不是非常的apache,所以以後有可能改為apache的url樣式。

這個主頁目前資訊量有限。大多數好東西,在其github首頁: (最近剛剛把repo轉移了到apache孵化專案頁

2. 最重要的東西在這:/wiki ,與storm相關的概念性知識90%都在這裡了。

不過作者把文章目錄直接交給了github的pages來管理,對於github新手來說可能會忽視這個有用的頁面:/wiki/_pages

4. 寫的非常好的,有圖有證據的量子恆道官方部落格storm系列:

/wiki/rationale 官方的

** 量子恆道

以下是我的理解:

直接面向客戶的網際網路網頁,如電子商務,都注重客戶體驗,所以客戶操作盡量簡單化,即流水線化,如登陸->搜尋->下單->(推薦)->付款。所以,形象點,乙個業務流程即乙個流水。那麼,如果具有相當大業務流程併發時,n個流水就變成了瀑布、長江、黃河。在這種情況下,傳統的單機處理是無法滿足效能需求的。必須得分布式處理。storm就提供了乙個分布式流處理框架,可以讓開發者很容易的建立乙個健壯的分布式程式,而不用過於關心底層分布式的實現。

storm的現實模型就是水流的處理,例如小區供水。

紅色強調部分,在storm的實現中,真的就是這麼做的。我會在後面的文章中去解釋。

storm實現:

spout:        資料來源,源源不斷的傳送元組資料tuple

tuple:         元組資料的抽象介面,可以是任何型別的資料。但是必須要可序列化。

stream:     tuple的集合。乙個stream內的tuple擁有相同的源。

bolt:             消費tuple的節點。消費後可能會排出新的tuple到該stream上,也可能會排到到其他stream,也或者根本不排。可併發。

topology: 將spout、bolt整合起來的拓撲圖。定義了spout和bolt的結合關係、併發數量、配置等等。

有圖有真相:

這裡storm的幾個特性比較重要,是我們在選取是否使用storm時要參考的:

縱向擴充套件性

保證無資料丟失

健壯容錯能力

多語言支援

很形象的取名,雨雲,產生雨點的。它的作用有:

注意:當乙個topology被正常分配、啟動後,nimbus只會監控supervisor的狀態,為重新分配資源做準備。並不會做stream中tuple分配到某節點這種事。

所以,如果nimbus在topology正常執行時掛掉,是不會影響該topology的正常執行的。它影響的是重新分配cluster資源。

supervisor

真正的工作節點。在其內部執行的可能是乙個spout、亦可能是乙個bolt。

注: acker 是個什麼東西,後面的文章會講述。這裡暫且不提。

舉例:

在該例子中,

blue spout並行度 = 2

green bolt並行度= 2

yellow bolt並行度 = 6

在不計acker的情況下,預設總的執行緒數 = 2+2+6 = 10. 兩個節點的兩個worker,在平均分配下,就是每個節點5個,即每個worker的執行緒池中有5個executor。

均勻分配,兩個worker各得三個yellow bolt, 乙個blue spout,和乙個green bolt。

但是,green bolt在配置時,表明需要兩個executor和四個task。所以在兩個worker上,每個其實要處理 3(yellow bolt) + 1(blue spout) + 2(green bolt) = 6個task。

由於每個worker我們只配了5個executor,所以這6個task就在5個executor上輪循執行。而事實上,storm做了優化,對於同乙個型別的task,會交由同乙個executor去處理。

所以,在每個節點上,會有固定的3個executor去執行yellow bolt, 乙個固定的executor去執行blue spout,乙個固定的executor去執行兩個green spout。

zookeeper

zookeeper是storm分布資訊儲存的地方。

所以,這裡真正會影響到集群執行的是zookeeper。一旦zookeeper掛掉,整個storm就無法工作了。

Storm 基本概念

storm 是乙個免費並開源的分布式實時計算系統。利用storm 可以很容易做到可靠地處理無限的資料流,像hadoop 批量處理大資料一樣,storm 可以實時處理資料。storm 集群的master 節點,負責分發使用者 指派給具體的supervisor 節點上的worker 節點,去執行topo...

Storm基本概念

storm為分布式實時計算提供了一組通用原語,可被用於 流處理 之中,實時處理訊息並更新資料庫。這是管理佇列及工作者集群的另一種方式。storm也可被用於 連續計算 continuous computation 對資料流做連續查詢,在計算時就將結果以流的形式輸出給使用者。它還可被用於 分布式rpc ...

Storm系列之 基本概念

寫在前面的話 請允許我廢話幾句。這個系列的文章發布的時間是在我完成了storm的專案開發之後才找出來時間寫的,在研究storm過程中,國內較好的參考文章實在有限,大多是入門和概念剖析。storm的googlegroup對於新手來說實在不友好。有經驗人士都不願意回答新手的一些 愚蠢 的問題。現在因為s...