1. 程式人生 > >Strom的程式設計模型和核心

Strom的程式設計模型和核心

在這裡插入圖片描述

元組(Tuple)

訊息傳遞的基本單元,是一個命名的值列表,元組中的欄位可以是任何型別的物件,Storm使用元組作為其資料模型,元組支援所有的基本型別,字串和位元組陣列作為欄位值,只要實現型別的序列化介面就可以使用該型別的物件,元組本來對映是一個key-value的Map,但是由於各個元件間傳遞的元組的欄位名稱已經事先定義好,所以,只要按序把元組填入各個value即可,所以元組是一個value的List

流(Steam)

流是Storm的核心抽象,是一個無界的元組系列,源源不斷傳遞的元組就組成了流,在分散式環境中並行地建立和處理

水龍頭(Spout)

Spout是拓撲的流的來源,是一個拓撲中產生源資料流的元件,通常,Spout從外部資料來源中讀取資料,然後轉換為拓撲內部的源資料

Spout是可以可靠或者不可靠,如果Strom處理元組失敗,可靠的Spout能夠重新發射,不可靠的Spout儘快忘記發出的元組

Spout可以發出超過一個流

Spout的主要方法是nextTuple(),NextTuple()會發出一個新的Tuple到拓撲,如果沒有新的元組發出,則簡單返回

Spout的其他方法是ack()和fail(),當Storm檢測到一個元組從Spout發出時ack()和fail()就會被呼叫,要麼成功完成通過拓撲,要麼未能完成,ack()和fail()只能被可靠的Spout呼叫

IRichSpout是Spout必須實現的介面

轉接頭(Bolt)

在拓撲中所有處理都在Bolt中完成,Bolt是流的處理節點,從一個拓撲接收資料,然後執行進行處理的元件,Bolt可以完成過濾,業務處理,連線運算,連線與訪問資料庫等任何操作

Bolt是一個被動的角色,其介面中有一個execute()方法,在接收到訊息後就會呼叫此方法,使用者可以在其中執行自己希望的操作

Bolt可以完成簡單的流的轉換,而完成複雜的流的轉換需要多個步驟,所以就需要多個Bolt

Bolt可以發出超過一個的流

拓撲(Topology)

拓撲(Topology)是Storm中執行的一個實時應用程式,因為各個元件間訊息流動而形成邏輯上的拓撲結構

把實時應用程式的執行邏輯打成jar包後提交到Storm的拓撲(Topology),Storm的拓撲類似於MapReduce的作業(Job),其主要的區別是MapReduce的作業最終會完成,而一個拓撲永遠都在執行,直到它被殺死,一個拓撲是一個圖的Spout和Bolt的連線流分組

核心元件

在這裡插入圖片描述

nimbus是整個叢集的控管核心,負責topology的提交,執行狀態監控,任務重新分配等工作.

zk是一個管理者,監控者

總體描述:nimbus下命令(分配任務),zk監督執行(心跳監控,worker,supervisor的心跳都歸它管)

supervisor下載程式碼,接受指令,建立worker和執行緒等

worker,excutor工作,task就是工作的具體內容

主控節點與工作節點

Storm叢集中有兩類節點:主控節點(Master Node)和工作節點(Worker Node) 其中,主控節點只有一個,而工作節點可以有多個

Nimbus程序與Supervisor程序

主控節點執行一個稱為Nimbus的守護程序類似於Hadoop的JobTracker,Nimbus負責在叢集中分發程式碼.對節點分配任務,並監視主機故障

每個工作節點執行一個稱為supervisor的守護程序,Supervisor監聽其主機上已經分配的主機的作業,啟動和停止Nimbus已經分配的工作程序

流分組(Stream grouping)

流分組,是拓撲定義中的一部分,為每個Bolt指定應該接受哪個流作為輸入,流分組定義了流/元組如何在bolt的任務之間進行分發

Storm內建了8種流分組方式

工作程序(Worker)

worker是spout/bolt中執行具體處理邏輯的程序,一個worker就是一個程序,程序裡面包含多個執行緒

執行器(Executor)

一個執行緒就是一個executor,一個執行緒會處理一個或多個任務

任務(Task)

一個任務就是一個task

實時流計算常見架構圖

後臺系統 --> Flume叢集 —> Kafka叢集 (—>其他操作) —> storm叢集—> redis叢集

1)Flume獲取資料。

2)Kafka臨時儲存資料。

3)Strom計算資料。

4)Redis是個記憶體資料庫,用來儲存資料。