Storm組件

參考文章:

Apache Storm 官方文檔中文版?

storm Tutorial 的解讀 + 個人理解

官方文檔組件概念?


Nimbus和Supervisor

Strom集群中有一個主控節(jié)點和一個工作節(jié)點册舞。主控節(jié)點中運行一個叫"Nimbus"的守護進程匀奏;而工作節(jié)點中運行一個"Supervisor"的守護進程破加。


Nimbus主控節(jié)點

Nimbus是作為調(diào)度器角色鸳玩,它負責在集群內(nèi)分發(fā)代碼菲盾,為每個工作結(jié)點指派任務和監(jiān)控失敗的任務磺芭;用于響應分布在集群中的節(jié)點婴噩,分配任務和監(jiān)測故障骆撇。這個很類似于Hadoop中的Job Tracker瞒御。

Supervisor工作結(jié)點

Supervisor 作為worker的代理角色,用于收聽工作(Worker)指派并基于要求運行工作進程神郊。每個工作節(jié)點都是topology中一個子集的實現(xiàn)肴裙。而Nimbus和Supervisor之間的協(xié)調(diào)則通過Zookeeper系統(tǒng)或者集群

Zookeeper

zookeeper作為整個系統(tǒng)的協(xié)調(diào)者趾唱,協(xié)調(diào)Supervisor和Nimbus之間的服務。Nimbus和Supervisor之間的所有協(xié)調(diào)工作都是通過一個Zookeeper集群來完成蜻懦。并且甜癞,nimbus進程和supervisor都是快速失敗(fail-fast)和無狀態(tài)的宛乃。所有的狀態(tài)要么在Zookeeper里面悠咱,要么在本地磁盤上。這也就意味著你可以用kill-9來殺死nimbus和supervisor進程征炼,然后再重啟它們析既,它們可以繼續(xù)工作,就好像什么都沒有發(fā)生過似的谆奥。這個設計使得storm不可思議的穩(wěn)定眼坏。

Topology拓撲的構(gòu)成


1、Storm 分布式計算結(jié)構(gòu)稱為 topology(拓撲)雄右,由 stream(數(shù)據(jù)流)空骚,spout(數(shù)據(jù)流的生成者), bolt(運算)組成擂仍。各個組件間的消息流動形成邏輯上的一個拓撲結(jié)構(gòu)囤屹。

2、一個topology是spouts和bolts組成的圖逢渔, 通過streamgroupings將圖中的spouts和bolts連接起來肋坚。

3、Storm topology 大致等同與 Hadoop 這類批處理運算中的 job肃廓。然而智厌,批處理運算中的 job對運算的起始和終止有著明確定義, Stormtopology 會一直運行下去盲赊,除非進程被殺死或被取消部署


Tuple

1 铣鹏、storm使用tuple來作為它的數(shù)據(jù)模型。

2哀蘑、tuple是 包 含 了 一 個 或 者 多 個 鍵 值 對 的 列 表诚卸;每個值有一個名字,并且每個值可以是任何類型绘迁, 在我的理解里面一個tuple可以看作一個沒有方法的java對象合溺。總體來看缀台,storm支持所有的基本類型棠赛、字符串以及字節(jié)數(shù)組作為tuple的值類型。你也可以使用你自己定義的類型來作為值類型, 只要你實現(xiàn)對應的序列化器(serializer)睛约。

3鼎俘、一個Tuple代表數(shù)據(jù)流中的一個基本的處理單元,例如一條cookie日志痰腮,它可以包含多個Field而芥,每個Field表示一個屬性

4、Tuple本來應該是一個Key-Value的Map膀值,由于各個組件間傳遞的tuple的字段名稱已經(jīng)事先定義好了,所以Tuple只需要按序填入各個Value误辑,所以就是一個Value List沧踏。

Stream

1、Stream是storm里面的關鍵抽象巾钉。

2翘狱、一個沒有邊界的、源源不斷的砰苍、連續(xù)的Tuple序列就組成了Stream

3潦匈、storm提供一些原語來分布式地、可靠地把一個stream傳輸進一個新的stream赚导。比如: 你可以

把一個tweets流傳輸?shù)綗衢T話題的流茬缩。

4、提供的最基本的處理stream的原語是spout和bolt吼旧。你可以實現(xiàn)Spout和Bolt對應的接口以處理你的應用的邏輯凰锡。

消息源頭Spout

1、是一個topology里面的消息生產(chǎn)者圈暗,充當采集器的角色掂为。

2、Spout會從外部數(shù)據(jù)源(隊列员串、數(shù)據(jù)庫等)讀取數(shù)據(jù)勇哗,然后封裝成Tuple形式,之后發(fā)送到Strea中寸齐。

3欲诺、Spout是一個主動的角色,在接口內(nèi)部有個nextTuple函數(shù)访忿,Storm框架會不停的調(diào)用該函數(shù)瞧栗。

4、開發(fā)一個 spout 的主要工作就是編寫代碼從數(shù)據(jù)源或者 API 消費數(shù)據(jù)海铆,而不會用來實現(xiàn)具體的業(yè)務邏輯迹恐。

Blot

1、Topology中所有的處理都由Bolt完成卧斟。即所有的消息處理邏輯(具體的業(yè)務邏輯)被封裝在bolts里面殴边。 Bolt可以完成任何事憎茂,比如:過濾 tuple、連接( join)和聚合操作( aggregation)锤岸、訪問文件/數(shù)據(jù)庫竖幔、等等。

2是偷、將一個或者多個Stream數(shù)據(jù)流作為輸入拳氢,對數(shù)據(jù)實施運算后,選擇性地輸出一個或者多個新的數(shù)據(jù)流Stream

3蛋铆、Bolt是一個被動的 角色馋评,其接口中有一個execute(Tuple input)方法,在接收到消息之后會調(diào)用此函數(shù)刺啦,用戶可以在此方法中執(zhí)行自己的處理邏輯留特。

4、如果遇到復雜流的處理也可能將tuple發(fā)送給另一個Bolt進行處理玛瘸。即在實時計算的項目中通常需要經(jīng)過很多blots蜕青。

Stream Groupings

Stream Grouping定義了一個流在Bolt任務間該如何被切分。 這里有storm提供的9個Stream Grouping類型

1糊渊、shuffleGrouping(隨機分組)

隨機分發(fā)tuple到Bolt的任務右核,保證每個任務獲得相等數(shù)量的tuple。

2再来、fieldsGrouping(字段分組)

根據(jù)指定字段分割數(shù)據(jù)流蒙兰,并分組。例如芒篷,根據(jù)"user-id"字段搜变,相同"user-id"的元組總是分發(fā)到同一個任務,不同“ user-id”的元組可能分發(fā)到不同的任務针炉。

原理是 對某個或幾個字段做hash挠他,然后用hash結(jié)果求模得出目標taskId。

3篡帕、globalGrouping(全局分組)

全部流都分配到bolt的同一個任務殖侵。明確地說,是分配給ID最小的那個task镰烧。

4拢军、allGrouping(全部分組)

tuple被復制到bolt的所有任務。這種類型需要謹慎使用怔鳖。

5茉唉、directGrouping(直接分組)

這是一個特別的分組類型。元組生產(chǎn)者決定tuple由哪個元組處理者(Blot)任務接收。

6度陆、noneGrouping(無分組)

目前艾凯,無分組等效于隨機分組。但最終懂傀,Storm將把無分組的Bolts放到Bolts或Spouts訂閱它們的同一線程去執(zhí)行(如果可能)趾诗。

7、localOrShuffleGrouping(本地或隨機分組)

如果目標bolt有一個或多個任務在同一個的worker進程中蹬蚁,tuples會隨機發(fā)送給這些任務恃泪。 否則,就和普通的隨機分組一樣犀斋。

8悟泵、PartialKeyGrouping(部分關鍵字分組) after v1.0.0

這種方式與字段分組很相似,根據(jù)定義的字段來對數(shù)據(jù)流進行分組闪水,不同的是,這種方式會考慮下游 Bolt 數(shù)據(jù)處理的均衡性問題蒙具,在輸入數(shù)據(jù)源關鍵字不平衡時會有更好的性能球榆。

9、自定義分組

可以實現(xiàn)customGrouping接口來選擇出目標task禁筏。

總結(jié)

每個Topology都由Spout和Bolt組成持钉,在Spout和Bolt傳遞信息的基本單位叫做Tuple,由Spout發(fā)出的連續(xù)不斷的Tuple及其在相應Bolt上處理的子Tuple連起來稱為一個Steam篱昔,每個Stream的命名是在其首個Tuple被Spout發(fā)出的時候每强,此時Storm會利用內(nèi)部的Ackor機制保證每個Tuple可靠的被處理。而Tuple可以理解成鍵值對州刽,其中空执,鍵就是在定義在declareStream方法中的Fields字段,而值就是在emit方法中發(fā)送的Values字段

運行中的Topology的組件

Worker processes(進程)

1穗椅、運行具體處理組件邏輯的進程

2辨绊、一個Topology可能會在一個或者多個Worker(工作進程)里面執(zhí)行,每個worker是一個物理JVM并且執(zhí)行整個Topology的一部分匹表。 storm會盡量均勻地將工作分配給所有的worker门坷。

Executors (threads)(線程)

executor:每個execcutor對應一個線程。 1個executor是1個worker進程生成的1個線程袍镀。它可能運行著1個相同的組件(spout或bolt)的1個或多個task默蚌。

Tasks

每個Spout或者Bolt 會被當做很多task在整個集群中運行,在executor這個線程中運行一個或多個task苇羡。



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绸吸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惯裕,老刑警劉巖温数,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蜻势,居然都是意外死亡撑刺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門握玛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來够傍,“玉大人,你說我怎么就攤上這事挠铲∶嵬停” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵拂苹,是天一觀的道長安聘。 經(jīng)常有香客問我,道長瓢棒,這世上最難降的妖魔是什么浴韭? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮脯宿,結(jié)果婚禮上念颈,老公的妹妹穿的比我還像新娘。我一直安慰自己连霉,他們只是感情好榴芳,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著跺撼,像睡著了一般窟感。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上财边,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天肌括,我揣著相機與錄音,去河邊找鬼酣难。 笑死谍夭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的憨募。 我是一名探鬼主播紧索,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼菜谣!你這毒婦竟也來了珠漂?” 一聲冷哼從身側(cè)響起晚缩,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎媳危,沒想到半個月后荞彼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡待笑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年鸣皂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暮蹂。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡寞缝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仰泻,到底是詐尸還是另有隱情荆陆,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布集侯,位于F島的核電站被啼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棠枉。R本人自食惡果不足惜趟据,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望术健。 院中可真熱鬧,春花似錦粘衬、人聲如沸荞估。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勘伺。三九已至,卻和暖如春褂删,著一層夾襖步出監(jiān)牢的瞬間飞醉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工屯阀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缅帘,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓难衰,卻偏偏與公主長得像钦无,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盖袭,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 目錄 場景假設 調(diào)優(yōu)步驟和方法 Storm 的部分特性 Storm 并行度 Storm 消息機制 Storm UI...
    mtide閱讀 17,113評論 30 60
  • 原文鏈接Storm Tutorial 本人原創(chuàng)翻譯失暂,轉(zhuǎn)載請注明出處 這個教程內(nèi)容包含如何創(chuàng)建topologies及...
    quiterr閱讀 1,626評論 0 6
  • Date: Nov 17-24, 2017 1. 目的 積累Storm為主的流式大數(shù)據(jù)處理平臺對實時數(shù)據(jù)處理的相關...
    一只很努力爬樹的貓閱讀 2,174評論 0 4
  • 什么是實時流計算彼宠? 主要的處理模式可以分為:流處理,批處理 流處理是直接處理弟塞,有時也分為在線,離線,近線(st...
    Bloo_m閱讀 5,065評論 1 1
  • “花非花凭峡,霧非霧”是白居易詞中很凄美的一首,讀來令人憂傷决记。四季中每一天都有花在怒放摧冀,平生中也見過無數(shù)的花,可是沒有...
    王了一一閱讀 336評論 4 6