Storm 基礎(chǔ)知識(shí)

2018-09-28 16:05 更新

基礎(chǔ)知識(shí)

Storm 是一個(gè)分布式的,可靠的,容錯(cuò)的數(shù)據(jù)流處理系統(tǒng)。它會(huì)把工作任務(wù)委托給不同類型的組件,每個(gè)組件負(fù)責(zé)處理一項(xiàng)簡單特定的任務(wù)。Storm 集群的輸入流由一個(gè)被稱作 spout 的組件管理,spout 把數(shù)據(jù)傳遞給 bolt, bolt 要么把數(shù)據(jù)保存到某種存儲(chǔ)器,要么把數(shù)據(jù)傳遞給其它的 bolt。你可以想象一下,一個(gè) Storm 集群就是在一連串的 bolt 之間轉(zhuǎn)換 spout 傳過來的數(shù)據(jù)。

這里用一個(gè)簡單的例子來說明這個(gè)概念。昨晚我在新聞節(jié)目里看到主持人在談?wù)撜稳宋锖退麄儗?duì)于各種政治話題的立場。他們一直重復(fù)著不同的名字,而我開始考慮這些名字是否被提到了相同的次數(shù),以及不同次數(shù)之間的偏差。

想像播音員讀的字幕作為你的數(shù)據(jù)輸入流。你可以用一個(gè) spout 讀取一個(gè)文件(或者 socket,通過 HTTP,或者別的方法)。文本行被 spout 傳給一個(gè) bolt,再被 bolt 按單詞切割。單詞流又被傳給另一個(gè) bolt,在這里每個(gè)單詞與一張政治人名列表比較。每遇到一個(gè)匹配的名字,第二個(gè) bolt 為這個(gè)名字在數(shù)據(jù)庫的計(jì)數(shù)加1。你可以隨時(shí)查詢數(shù)據(jù)庫查看結(jié)果, 而且這些計(jì)數(shù)是隨著數(shù)據(jù)到達(dá)實(shí)時(shí)更新的。所有組件(spouts和bolts)及它們之間的關(guān)系請(qǐng)參考拓?fù)鋱D1-1

現(xiàn)在想象一下,很容易在整個(gè) Storm 集群定義每個(gè) bolt 和 spout 的并行性級(jí)別,因此你可以無限的擴(kuò)展你的拓?fù)浣Y(jié)構(gòu)。很神奇,是嗎?盡管這是個(gè)簡單例子,你也可以看到 Storm 的強(qiáng)大。

有哪些典型的 Storm 應(yīng)用案例?

數(shù)據(jù)處理流

正如上例所展示的,不像其它的流處理系統(tǒng),Storm 不需要中間隊(duì)列。

連續(xù)計(jì)算

連續(xù)發(fā)送數(shù)據(jù)到客戶端,使它們能夠?qū)崟r(shí)更新并顯示結(jié)果,如網(wǎng)站指標(biāo)。

分布式遠(yuǎn)程過程調(diào)用

頻繁的 CPU 密集型操作并行化。

Storm 組件

對(duì)于一個(gè)Storm集群,一個(gè)連續(xù)運(yùn)行的主節(jié)點(diǎn)組織若干節(jié)點(diǎn)工作。

在 Storm 集群中,有兩類節(jié)點(diǎn):主節(jié)點(diǎn) master node 和工作節(jié)點(diǎn) worker nodes。主節(jié)點(diǎn)運(yùn)行著一個(gè)叫做 Nimbus 的守護(hù)進(jìn)程。這個(gè)守護(hù)進(jìn)程負(fù)責(zé)在集群中分發(fā)代碼,為工作節(jié)點(diǎn)分配任務(wù),并監(jiān)控故障。Supervisor守護(hù)進(jìn)程作為拓?fù)涞囊徊糠诌\(yùn)行在工作節(jié)點(diǎn)上。一個(gè) Storm 拓?fù)浣Y(jié)構(gòu)在不同的機(jī)器上運(yùn)行著眾多的工作節(jié)點(diǎn)。

因?yàn)?Storm 在 Zookeeper 或本地磁盤上維持所有的集群狀態(tài),守護(hù)進(jìn)程可以是無狀態(tài)的而且失效或重啟時(shí)不會(huì)影響整個(gè)系統(tǒng)的健康(見圖1-2)

在系統(tǒng)底層,Storm 使用了 zeromq(0mq, zeromq(http://www.zeromq.org))。這是一種先進(jìn)的,可嵌入的網(wǎng)絡(luò)通訊庫,它提供的絕妙功能使 Storm 成為可能。下面列出一些 zeromq 的特性。

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

NOTE: Storm 只用了 push/pull sockets

Storm 的特性

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)