storm基本概念

流式計算中,各個中間件產(chǎn)品對計算過程中的角色的抽象都不盡相同,實現(xiàn)方式也是千差萬別。本文針對storm中間件在進(jìn)行流式計算中的幾個概念做個概括總結(jié)。

基本元素:

storm分布式計算結(jié)構(gòu)稱為topology(拓?fù)?由stream,spout,bolt組成。


spout代表一個storm拓?fù)渲械臄?shù)據(jù)入口,連接到數(shù)據(jù)源,將數(shù)據(jù)轉(zhuǎn)化為一個個tuple,并發(fā)射tuple

stream是由無限制個tuple組成的序列。tuple為storm的核心數(shù)據(jù)結(jié)構(gòu),是包含了一個或多個鍵值對的列表。

bolt可以理解為計算程序中的運(yùn)算或者函數(shù),bolt的上游是輸入流,經(jīng)過bolt實施運(yùn)算后,可輸出一個或者多個輸出流。

bolt可以訂閱多個由spout或者其他bolt發(fā)射的數(shù)據(jù)流,用以構(gòu)建復(fù)雜的數(shù)據(jù)流轉(zhuǎn)換網(wǎng)絡(luò)。


上述即為storm最基本的組成元素,無論storm如何運(yùn)行,都是以stream,spout,bolt做為最基本的運(yùn)行單元。而這三者則是共同構(gòu)成了一個storm拓?fù)鋞opology。

storm集群組成部分:

首先需要明確一個概念,bolt,spout實例,都屬于任務(wù),spout產(chǎn)生數(shù)據(jù)流,并發(fā)射,bolt消費(fèi)數(shù)據(jù)流,進(jìn)行計算,并進(jìn)行落地或再發(fā)射,他們的存在以及運(yùn)行過程都需要消耗資源,而storm集群是一個提供了資源的集群,我們要做的就是將spout/boult實例合理分配到storm集群提供的計算資源上,這樣就可以讓spout/bolt得以執(zhí)行。


worker為JVM進(jìn)程,一個topology會分配到一個或者多個worker上運(yùn)行。

executor是worker內(nèi)的java線程,是具體執(zhí)行bolt/spout實例用的。下篇文章在介紹如何提供storm并行計算能力時會介紹worker以及executor的配置。

在storm中,worker是由supervisor進(jìn)程創(chuàng)建,并進(jìn)行監(jiān)控的。storm集群遵循主從模式,主為nimbus,從為supervisor,storm集群由一個主節(jié)點(確實有單點問題),和多個工作節(jié)點(supervisor)組成,并使用zookeeper來協(xié)調(diào)集群中的狀態(tài)信息,比如任務(wù)分配情況,worker狀態(tài),supervisor的拓?fù)涠攘俊?/p>


通過配置可指定supervisor上可運(yùn)行多少worker。一個worker代表一個slot。

nimbus守護(hù)進(jìn)程的主要職責(zé)是管理,協(xié)調(diào)和監(jiān)控在集群上運(yùn)行的topology.包括topology的發(fā)布,任務(wù)指派,事件處理失敗時重新指派任務(wù)。

supervisor守護(hù)進(jìn)程等待nimbus分配任務(wù)后生成并監(jiān)控workers執(zhí)行任務(wù)。supervosior和worker都是運(yùn)行在不同的JVM進(jìn)程上。


了解了集群模式下,storm大致的分布概念,下面結(jié)合筆者做的一個實例,了解一下如何發(fā)布計算資源到storm集群上。

注:本文不花費(fèi)大量篇章在代碼實現(xiàn)說明上,讀者主要著重概念。


筆者定義了一個spout,兩個bolt 運(yùn)算過程如下:


其中streamMaking是一個不斷生成隨機(jī)數(shù)(5~30)的spout實例,Step1Bolt會過濾掉15以下的隨機(jī)數(shù)(過濾),15以上的隨機(jī)數(shù)會乘以16(計算),再將結(jié)果向后發(fā)射。Step2Bolt訂閱Step1Bolt發(fā)射的數(shù)據(jù),接收數(shù)據(jù)后,打印輸出。流程結(jié)束。

筆者在定義spout/bolt實例時,配置了spout,bolt的并行執(zhí)行數(shù)。其中

streamMaking:4 ? Step1Bolt:2 ?Step2Bolt 1

這樣,發(fā)布成功后,storm會根據(jù)我的配置,分配足夠的計算資源給予spout/bolt進(jìn)行執(zhí)行。

發(fā)布:

發(fā)布時,spout和bolt都是在一起以jar的形式發(fā)布到nimbus上的,分配后,內(nèi)部定義的spout和bolt將以組件的形式被nimbus分配至worker進(jìn)程中執(zhí)行。

其中worker都是由supervisor創(chuàng)建的,創(chuàng)建出來的worker進(jìn)程與supervisor是分開的不同進(jìn)程。一個supervisor可創(chuàng)建多少worker可通過修改storm安裝目錄下的storm.yaml進(jìn)行配置。


上述配置中,指明了該supervisor最多可生成6個worker,每一個worker將使用其中一個端口。

task是執(zhí)行的最小單元。spout/bolt實例在定義中指定了,要起多少task,以及多少executor。也即一個topology發(fā)布之前已經(jīng)定義了task總量,和需要多少資源來執(zhí)行我的task總量。nimbus將根據(jù)已有的計算資源進(jìn)行分配。

下圖中:? nimbus左邊代表著計算任務(wù)量,和所需計算配置

nimbus右邊代表著計算資源

nimbus將根據(jù)計算資源信息,合理的分發(fā)計算任務(wù)量。


發(fā)布成功后,通過storm自帶的UI功能,可以查看你發(fā)布的topology運(yùn)行以及其中每個組件的分布執(zhí)行情況。



監(jiān)控圖像中清晰的顯示了,目前部署的topology,以及topology中每個組件所分配的計算資源所在host,以及每個組件發(fā)射了多少tuple,接收了多少tuple,以及有多少個executor在并行執(zhí)行。

本文講述了storm內(nèi)的基本元素以及基本概念,后續(xù)將講述storm的重點配置信息,以及如何提高并發(fā)計算能力,窗口概念等高級特性,后續(xù)會進(jìn)行源碼分析,以及與其他實時計算中間件的比較。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 目錄 場景假設(shè) 調(diào)優(yōu)步驟和方法 Storm 的部分特性 Storm 并行度 Storm 消息機(jī)制 Storm UI...
    mtide閱讀 17,186評論 30 60
  • 本文主要介紹storm中的基本概念,從基礎(chǔ)上了解strom的體系結(jié)構(gòu),便于后續(xù)編程過程中作為基礎(chǔ)指導(dǎo)。主要的概念包...
    看山遠(yuǎn)兮閱讀 1,574評論 0 9
  • Storm 系統(tǒng)中包含以下幾個基本概念:拓?fù)洌═opologies)流(Streams)數(shù)據(jù)源(Spouts)數(shù)據(jù)...
    發(fā)光的魚閱讀 841評論 0 0
  • Date: Nov 17-24, 2017 1. 目的 積累Storm為主的流式大數(shù)據(jù)處理平臺對實時數(shù)據(jù)處理的相關(guān)...
    一只很努力爬樹的貓閱讀 2,206評論 0 4
  • 【每日一言·德育】 德育與藝體結(jié)合,我認(rèn)為首先是藝體學(xué)科德育目標(biāo)落實的問題;其次是藝體活動中進(jìn)一步錘練,以及展示學(xué)...
    小小宇哥閱讀 613評論 0 0