Storm Topology組件

Storm集群中的任務稱之為Topology佩迟。

對比Hadoop中的MapReduce job蚁鳖,mapper用于從數據源中獲取數據脏嚷,經過簡單處理,以一定的格式傳遞給reducer擎场,reducer負責后續(xù)處理羽德。

類似的,Topology任務也要從數據源中獲取數據迅办,然后進行后續(xù)處理宅静。在Topology中從外部數據源獲取數據的組件,稱之為Spout站欺,處理數據的組件姨夹,稱之為bolt。一個Topology就是由一個或者多個的Spout和Bolt組成矾策。

對于如下:

數據獲取數據處理

HadoopMapperReducer

StormSpoutBolt

小貼士:Storm中有一些術語(不是全部)磷账,是按照氣象術語來命名的。例如Storm是暴風雨贾虽,spout是龍卷風的意思逃糟,bolt是雷電的意思,nimbus是雨云的意思。

接下來绰咽,我們從簡單到復雜逐步分析一個Topology的組成蛉抓。

1、最簡單的Topology:1個Spout剃诅,1個Bolt

Topology:在這個Topology中巷送,我們看到一個Spout和一個Bolt。在Topology中矛辕,我們將Spout和Bolt稱之為組件(Components)笑跛。一個Topology中,必須同時存在Spout和Bolt聊品,Spout和Bolt數量可以隨意飞蹂。最簡單的就是如上圖,一個Topology中只有一個Spout和一個Bolt翻屈。要提醒的是:Topology的組件目前只有Spout和Bolt陈哑,沒有其他組件。所以以后提到一個Topology的組件的時候伸眶,其實也就是指的是Spout或者Bolt惊窖。

Stream:我們已經知道Spout是從外部數據源中獲取數據,以一定的格式將數據傳遞給Bolt處理厘贼。從Spout中源源不斷的給Bolt傳遞數據界酒,形成的這個數據通道我們稱之為Stream(流)。因為Strom是一個實時計算的流式處理框架嘴秸,其不是像hadoop那樣毁欣,一次性處理一大批的數據(批處理),Storm是不斷從外部數據源中獲取最新的數據岳掐,然后將新的數據傳遞給Bolt處理(增量處理)凭疮。這樣不斷的獲取與傳輸就形成了這個數據流通道就稱之為Stream,如上圖的虛線所示串述。

Tuple:Tuple這個概念在上面沒有明顯的標記出來执解,其實Stream的最小組成單元。上圖中的Steam是一條虛線剖煌,我們可以將虛線中的每一個小線段"-"看成一個Tuple材鹦。因為Storm的Spout需要源源不斷的向Bolt發(fā)送數據逝淹,每一次發(fā)送的數據我們稱之為一個Tuple耕姊,也就是說,Stream流實際上就是通過這些源源不斷的Tuple組成。在Storm官網上有這樣一句話" A stream is an unbounded sequence of tuples ..."栅葡,unbounded的意思其實就是說茉兰,Spout是源源不斷的發(fā)送Tuple給Bolt的,我們不知道什么時候會停止發(fā)送Tuple欣簇,因此當然是無邊界的规脸。

2坯约、稍微復雜的Topology:1個Spout、多個Bolt

Topology:在這個Topology中莫鸭,我們有一個spout和3個bolt闹丐。從數據流向中,我們可以看出被因,spout可以將數據傳遞給多個bolt卿拴,bolt還能將數據傳遞給下一級bolt。我們知道Bolt在Topology中的作用是處理器梨与,也就是說Bolt是負責處理數據的堕花。對于同一條數據,我們可能會挖掘出不同方面的信息粥鞋。以中間的并列的2個Bolt為例缘挽,Spout可以將數據同時發(fā)送給2個Bolt,這兩個Bolt分別從不同的方便來分析這條數據呻粹。我們還可以看到壕曼,位于中上方的Bolt還將數據傳遞給了下一級Bolt,這樣的原因是等浊,有的時候窝稿,我們對于數據的分析必須是一步一步的,后一步的分析必須建立在之前分析的基礎上凿掂。

Stream:在上圖中伴榔,我們標記出了3個Stream。在Topology中庄萎,Spout與Bolt,Bolt與Bolt之間的數據通道都是一個流踪少。圖上分別用Stream1,Stream2糠涛、Stream3標記出援奢。這三個流有什么區(qū)別和聯系嗎?必須的忍捡。我們已經知道,Stream都是由Tuple組成的集漾,而Tuple是有數據格式的,在同一個流中,Tuple的數據格式應該都是一樣的砸脊;不同流中的數據格式可能相同具篇,也可能不同。舉例來說凌埂,假設我們這里的Spout每次都是將相同的數據發(fā)送給中間的2個Bolt進行處理驱显,那么Stream1和Stream2中Tuple的數據格式都是一樣的。前一個Bolt處理完還要將數據傳遞給下一級Bolt,處理完后的數據可能是另外一種格式埃疫。這時Stream3數據流中的數據格式可能與Stream1和Stream2就是不同的了伏恐。

3、復雜的Topology:多個Spout與多個Bolt

Topology:這可以算得上一個比較復雜的Topology了栓霜,在圖中有2個Spout翠桦、4個Bolt。再次深入胳蛮,我們發(fā)現一個Spout可以同時發(fā)送數據到多個Bolt秤掌,形成多個數據流,例如Spout1鹰霍。一個Bolt可以接受多個輸入闻鉴,如bolt3、bolt4茂洒。事實上孟岛,一個Bolt也可以產生多個到下一級Bolt的數據流,在圖中并沒有體現出來督勺。

我們在這里主要介紹一下渠羞,什么情況下一個Topology中會需要多個Spout。以一個實際案例智哀,假設有一個移動醫(yī)療app次询。用戶可以在APP上進行問診,會有醫(yī)生來進行回答瓷叫。這種情況下屯吊,醫(yī)生頭像在APP上顯示的位置必須是實時變化的,因為如果咨詢同一個醫(yī)生的用戶太多摹菠,后面的用戶就會排隊很長時間盒卸。因此,我們會使用Storm來實時計算醫(yī)生的權重次氨,權重越高蔽介,說明這個醫(yī)生當前比較空閑,而權重越低煮寡,說明醫(yī)生越忙虹蓄。APP會實時獲取醫(yī)生權重,將權重高的醫(yī)生幸撕,排在越前面∞弊椋現在的問題就是如何計算醫(yī)生的權重,簡單說2個維度:問診量杈帐、排隊數体箕。問診量表示的是當前醫(yī)生同時回答的病人的數量专钉,排隊數是有幾個人在排隊挑童±矍Γ基本上問診量越低,排隊數越少站叼,說明這個醫(yī)生越閑娃兽,權重應該就越高。在我們的Topology中尽楔,就可以用兩個Spout投储,一個用于從外部數據源中獲取醫(yī)生的問診量,一個用于獲取排隊數阔馋。當然實際的情況比這個肯定復雜玛荞,這里只是說明多個Spout在什么情況下會使用到。

DAG(有向無環(huán)圖)說明:

在storm中呕寝,spout和bolt勋眯、bolt與bolt之間的數據流向,將整合topology串起來了下梢。在網上千篇一律的翻譯或者轉載的文章中客蹋,我們可能也看到了很多次DAG這個概念。其實DAG很簡單孽江,有向無環(huán)圖讶坯,意思就是數據流是有方向的,但是不能形成一個環(huán)狀岗屏。如果形成了一個環(huán)狀辆琅,那么意味著Bolt中的數據還可能傳給Spout,spout又要傳遞給Bolt这刷。這就形成了一個死循環(huán)涎跨,Stream中的一個數據(Tuple)永遠也沒辦法處理完。

以下這個圖有2個環(huán)崭歧,不論是右上Bolt之間形成的環(huán)隅很,還是右下Spout與Bout之間形成的環(huán),都是不允許率碾。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末叔营,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子所宰,更是在濱河造成了極大的恐慌绒尊,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仔粥,死亡現場離奇詭異婴谱,居然都是意外死亡蟹但,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門谭羔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來华糖,“玉大人,你說我怎么就攤上這事瘟裸】筒妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵话告,是天一觀的道長兼搏。 經常有香客問我,道長沙郭,這世上最難降的妖魔是什么佛呻? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮病线,結果婚禮上吓著,老公的妹妹穿的比我還像新娘。我一直安慰自己氧苍,他們只是感情好夜矗,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著让虐,像睡著了一般紊撕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赡突,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天对扶,我揣著相機與錄音,去河邊找鬼惭缰。 笑死浪南,一個胖子當著我的面吹牛,可吹牛的內容都是我干的漱受。 我是一名探鬼主播络凿,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼昂羡!你這毒婦竟也來了絮记?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤虐先,失蹤者是張志新(化名)和其女友劉穎怨愤,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體蛹批,經...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡撰洗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年篮愉,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片差导。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡试躏,死狀恐怖,靈堂內的尸體忽然破棺而出柿汛,到底是詐尸還是另有隱情冗酿,我是刑警寧澤埠对,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布络断,位于F島的核電站,受9級特大地震影響项玛,放射性物質發(fā)生泄漏貌笨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一襟沮、第九天 我趴在偏房一處隱蔽的房頂上張望锥惋。 院中可真熱鬧,春花似錦开伏、人聲如沸膀跌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捅伤。三九已至,卻和暖如春巫玻,著一層夾襖步出監(jiān)牢的瞬間丛忆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工仍秤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留熄诡,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓诗力,卻偏偏與公主長得像凰浮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子苇本,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內容

  • 目錄 場景假設 調優(yōu)步驟和方法 Storm 的部分特性 Storm 并行度 Storm 消息機制 Storm UI...
    mtide閱讀 17,110評論 30 60
  • Storm入門系列之一:storm核心概念及特性 本文的將介紹一些 storm 入門的基礎知識袜茧,包括 storm ...
    zhaif閱讀 3,113評論 0 17
  • 本文主要介紹storm中的基本概念,從基礎上了解strom的體系結構圈澈,便于后續(xù)編程過程中作為基礎指導惫周。主要的概念包...
    看山遠兮閱讀 1,527評論 0 9
  • 一、Storm簡介 Storm是一個免費并開源的分布式實時計算系統(tǒng)康栈。利用Storm可以很容易做到可靠地處理無限的數...
    達微閱讀 909評論 0 3
  • 昨天和老同學的談話递递,讓我感覺自己的眼光是如此的保守喷橙。突然想起1998年看到的一句話:眼光決定財富。今天用在這里還算...
    靈動123閱讀 164評論 0 0