Storm 基礎(chǔ)知識

2018-09-28 16:05 更新

基礎(chǔ)知識

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 的特性。

  • 一個并發(fā)架構(gòu)的 Socket 庫
  • 對于集群產(chǎn)品和超級計算,比 TCP 要快
  • 可通過 inproc(進程內(nèi)), IPC(進程間), TCP 和 multicast(多播協(xié)議)通信
  • 異步 I / O 的可擴展的多核消息傳遞應(yīng)用程序
  • 利用扇出(fanout), 發(fā)布訂閱(PUB-SUB),管道(pipeline), 請求應(yīng)答(REQ-REP),等方式實現(xiàn) N-N 連接

NOTE: Storm 只用了 push/pull sockets

Storm 的特性

在所有這些設(shè)計思想與決策中,有一些非常棒的特性成就了獨一無二的 Storm。

  • 簡化編程:如果你曾試著從零開始實現(xiàn)實時處理,你應(yīng)該明白這是一件多么痛苦的事情。使用 Storm,復(fù)雜性被大大降低了。
  • 使用一門基于 JVM 的語言開發(fā)會更容易,但是你可以借助一個小的中間件,在 Storm 上使用任何語言開發(fā)。有現(xiàn)成的中間件可供選擇,當然也可以自己開發(fā)中間件。
  • 容錯:Storm 集群會關(guān)注工作節(jié)點狀態(tài),如果宕機了必要的時候會重新分配任務(wù)。
  • 可擴展:所有你需要為擴展集群所做的工作就是增加機器。Storm 會在新機器就緒時向它們分配任務(wù)。
  • 可靠的:所有消息都可保證至少處理一次。如果出錯了,消息可能處理不只一次,不過你永遠不會丟失消息。
  • 快速:速度是驅(qū)動 Storm 設(shè)計的一個關(guān)鍵因素
  • 事務(wù)性:You can get exactly once messaging semantics for pretty much any computation. 你可以為幾乎任何計算得到恰好一次消息語義。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號