寫在前面的話:
請允許我廢話幾句。這個系列的文章發布的時間是在我完成了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。
舉例:
在該例子中,
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過程中,國內較好的參考文章實在有限,大多是入門和概念剖析。storm的googlegroup對於新手來說實在不友好。有經驗人士都不願意回答新手的一些 愚蠢 的問題。現在因為s...
Storm基本概念
原文 寫在前面的話 請允許我廢話幾句。這個系列的文章發布的時間是在我完成了storm的專案開發之後才找出來時間寫的,在研究storm過程中,國內較好的參考文章實在有限,大多是入門和概念剖析。storm的googlegroup對於新手來說實在不友好。有經驗人士都不願意回答新手的一些 愚蠢 的問題。現在...
Storm 基本概念
storm 是乙個免費並開源的分布式實時計算系統。利用storm 可以很容易做到可靠地處理無限的資料流,像hadoop 批量處理大資料一樣,storm 可以實時處理資料。storm 集群的master 節點,負責分發使用者 指派給具體的supervisor 節點上的worker 節點,去執行topo...