Storm 是一個分布式的,可靠的,容錯的數(shù)據(jù)流處理系統(tǒng)。它會把工作任務(wù)委托給不同類型的組件,每個組件負責處理一項簡單特定的任務(wù)。Storm 集群的輸入流由一個被稱作 spout 的組件管理,spout 把數(shù)據(jù)傳遞給 bolt, bolt 要么把數(shù)據(jù)保存到某種存儲器,要么把數(shù)據(jù)傳遞給其它的 bolt。你可以想象一下,一個 Storm 集群就是在一連串的 bolt 之間轉(zhuǎn)換 spout 傳過來的數(shù)據(jù)。
這里用一個簡單的例子來說明這個概念。昨晚我在新聞節(jié)目里看到主持人在談?wù)撜稳宋锖退麄儗τ诟鞣N政治話題的立場。他們一直重復(fù)著不同的名字,而我開始考慮這些名字是否被提到了相同的次數(shù),以及不同次數(shù)之間的偏差。
想像播音員讀的字幕作為你的數(shù)據(jù)輸入流。你可以用一個 spout 讀取一個文件(或者 socket,通過 HTTP,或者別的方法)。文本行被 spout 傳給一個 bolt,再被 bolt 按單詞切割。單詞流又被傳給另一個 bolt,在這里每個單詞與一張政治人名列表比較。每遇到一個匹配的名字,第二個 bolt 為這個名字在數(shù)據(jù)庫的計數(shù)加1。你可以隨時查詢數(shù)據(jù)庫查看結(jié)果, 而且這些計數(shù)是隨著數(shù)據(jù)到達實時更新的。所有組件(spouts和bolts)及它們之間的關(guān)系請參考拓撲圖1-1
現(xiàn)在想象一下,很容易在整個 Storm 集群定義每個 bolt 和 spout 的并行性級別,因此你可以無限的擴展你的拓撲結(jié)構(gòu)。很神奇,是嗎?盡管這是個簡單例子,你也可以看到 Storm 的強大。
有哪些典型的 Storm 應(yīng)用案例?
數(shù)據(jù)處理流
正如上例所展示的,不像其它的流處理系統(tǒng),Storm 不需要中間隊列。
連續(xù)計算
連續(xù)發(fā)送數(shù)據(jù)到客戶端,使它們能夠?qū)崟r更新并顯示結(jié)果,如網(wǎng)站指標。
分布式遠程過程調(diào)用
頻繁的 CPU 密集型操作并行化。
Storm 組件
對于一個Storm集群,一個連續(xù)運行的主節(jié)點組織若干節(jié)點工作。
在 Storm 集群中,有兩類節(jié)點:主節(jié)點 master node 和工作節(jié)點 worker nodes。主節(jié)點運行著一個叫做 Nimbus 的守護進程。這個守護進程負責在集群中分發(fā)代碼,為工作節(jié)點分配任務(wù),并監(jiān)控故障。Supervisor守護進程作為拓撲的一部分運行在工作節(jié)點上。一個 Storm 拓撲結(jié)構(gòu)在不同的機器上運行著眾多的工作節(jié)點。
因為 Storm 在 Zookeeper 或本地磁盤上維持所有的集群狀態(tài),守護進程可以是無狀態(tài)的而且失效或重啟時不會影響整個系統(tǒng)的健康(見圖1-2)
在系統(tǒng)底層,Storm 使用了 zeromq(0mq, zeromq(http://www.zeromq.org))。這是一種先進的,可嵌入的網(wǎng)絡(luò)通訊庫,它提供的絕妙功能使 Storm 成為可能。下面列出一些 zeromq 的特性。
NOTE: Storm 只用了 push/pull sockets
在所有這些設(shè)計思想與決策中,有一些非常棒的特性成就了獨一無二的 Storm。
更多建議: