storm,13.storm理論-Storm介紹以...
965
2023-08-07
Storm是個實時的、分布式以及具備高容錯的計算系統(tǒng)
Storm進(jìn)程常駐內(nèi)存
Storm數(shù)據(jù)不經(jīng)過磁盤,在內(nèi)存中處理
Storm架構(gòu)架構(gòu)Nimbus(老板)
負(fù)責(zé)資源調(diào)度和任務(wù)分配,接收jar包
Supervisor(監(jiān)工)
負(fù)責(zé)接受nimbus分配的任務(wù),啟動和停止屬于自己管理的worker進(jìn)程
Worker(工人)
運行具體處理組件邏輯的進(jìn)程
Task
worker中每一個spout/bolt的線程稱為一個task. 在storm0.8之后,task不再與物理線程對應(yīng),同一個spout/bolt的task可能會共享一個物理線程,該線程稱為executor
zookpeer(CEO)
Nimbus做任務(wù)的規(guī)劃設(shè)計,相當(dāng)于公司老板
zk負(fù)責(zé)維護集群健康,具體調(diào)度Supervisor相關(guān)作業(yè)
計算模型DAG (Topology)
– 有向無環(huán)圖
對于Storm實時計算邏輯的封裝
即,由一系列通過數(shù)據(jù)流相互關(guān)聯(lián)的Spout、Bolt所組成的拓?fù)浣Y(jié)構(gòu)
生命周期:此拓?fù)渲灰獑泳蜁恢痹诩褐羞\行,直到手動將其kill,否則不會終止(區(qū)別于MapReduce當(dāng)中的Job,MR當(dāng)中的Job在計算執(zhí)行完成就會終止)
Tuple
– 元組
Stream中最小數(shù)據(jù)組成單元
Stream
– 數(shù)據(jù)流
從Spout中源源不斷傳遞數(shù)據(jù)給Bolt、以及上一個Bolt傳遞數(shù)據(jù)給下一個Bolt,所形成的這些數(shù)據(jù)通道即叫做Stream
Stream聲明時需給其指定一個Id(默認(rèn)為Default)
實際開發(fā)場景中,多使用單一數(shù)據(jù)流,此時不需要單獨指定StreamId
Spout
– 數(shù)據(jù)源
1. 拓?fù)渲袛?shù)據(jù)流的來源。一般會從指定外部的數(shù)據(jù)源讀取元組(Tuple)發(fā)送到拓?fù)洌═opology)中
2. 一個Spout可以發(fā)送多個數(shù)據(jù)流(Stream)
可先通過OutputFieldsDeclarer中的declare方法聲明定義的不同數(shù)據(jù)流,發(fā)送數(shù)據(jù)時通過SpoutOutputCollector中的emit方法指定數(shù)據(jù)流Id(streamId)參數(shù)將數(shù)據(jù)發(fā)送出去
3. Spout中最核心的方法是nextTuple,該方法會被Storm線程不斷調(diào)用、主動從數(shù)據(jù)源拉取數(shù)據(jù),再通過emit方法將數(shù)據(jù)生成元組(Tuple)發(fā)送給之后的Bolt計算
Bolt
– 數(shù)據(jù)流處理組件
1. 拓?fù)渲袛?shù)據(jù)處理均有Bolt完成。對于簡單的任務(wù)或者數(shù)據(jù)流轉(zhuǎn)換,單個Bolt可以簡單實現(xiàn);更加復(fù)雜場景往往需要多個Bolt分多個步驟完成
2. 一個Bolt可以發(fā)送多個數(shù)據(jù)流(Stream)
可先通過OutputFieldsDeclarer中的declare方法聲明定義的不同數(shù)據(jù)流,發(fā)送數(shù)據(jù)時通過SpoutOutputCollector中的emit方法指定數(shù)據(jù)流Id(streamId)參數(shù)將數(shù)據(jù)發(fā)送出去
3. Bolt中最核心的方法是execute方法,該方法負(fù)責(zé)接收到一個元組(Tuple)數(shù)據(jù)、真正實現(xiàn)核心的業(yè)務(wù)邏輯
Stream Grouping
– 數(shù)據(jù)流分組(即數(shù)據(jù)分發(fā)策略)
數(shù)據(jù)傳輸ZMQ(twitter早期產(chǎn)品)
ZeroMQ 開源的消息傳遞框架,并不是一個MessageQueue
Netty
Netty是基于NIO的網(wǎng)絡(luò)框架,更加高效。(之所以Storm 0.9版本之后使用Netty,是因為ZMQ的license和Storm的license不兼容。)
優(yōu)勢高可靠性
異常處理
消息可靠性保障機制(ACK)
可維護性
StormUI 圖形化監(jiān)控接口
應(yīng)用場景流式處理流式處理(異步 與 同步)
客戶端提交數(shù)據(jù)進(jìn)行結(jié)算,并不會等待數(shù)據(jù)計算結(jié)果
逐條處理例:ETL(數(shù)據(jù)清洗)extracted transform load
統(tǒng)計分析例:計算PV、UV、訪問熱點 以及 某些數(shù)據(jù)的聚合、加和、平均等
客戶端提交數(shù)據(jù)之后,計算完成結(jié)果存儲到Redis、HBase、MySQL或者其他MQ當(dāng)中,
客戶端并不關(guān)心最終結(jié)果是多少。
實時請求實時請求應(yīng)答服務(wù)(同步)
客戶端提交數(shù)據(jù)請求之后,立刻取得計算結(jié)果并返回給客戶端
Drpc
實時請求處理
例:圖片特征提取
計算框架對比Strom vs mapreduceStorm:進(jìn)程、線程常駐內(nèi)存運行,數(shù)據(jù)不進(jìn)入磁盤,數(shù)據(jù)通過網(wǎng)絡(luò)傳遞。
MapReduce:為TB、PB級別數(shù)據(jù)設(shè)計的批處理計算框架。
Strom vs Spark StreamingStorm:純流式處理
專門為流式處理設(shè)計
數(shù)據(jù)傳輸模式更為簡單,很多地方也更為高效
并不是不能做批處理,它也可以來做微批處理,來提高吞吐
Spark Streaming:微批處理
將RDD做的很小來用小的批處理來接近流式處理
基于內(nèi)存和DAG可以把處理任務(wù)做的很快
發(fā)表評論
暫時沒有評論,來搶沙發(fā)吧~