Apache Storm的幾個(gè)核心概念:
Tuple:
Tuple是Storm中的主要數(shù)據(jù)結(jié)構(gòu)。它是有序元素的列表。默認(rèn)情況下杯道,Tuple支持所有數(shù)據(jù)類型。通常责蝠,它被建模為一組逗號(hào)分隔的值,并傳遞到Storm集群萎庭。
Stream:
流是元組的無序序列霜医。
Spouts:
Spout是流的源。通常驳规,Storm從原始數(shù)據(jù)源(如Twitter Streaming API肴敛,Apache Kafka隊(duì)列,Kestrel隊(duì)列等)接受輸入數(shù)據(jù)吗购。否則医男,您可以編寫spouts以從數(shù)據(jù)源讀取數(shù)據(jù)∧砻悖“ISpout”是實(shí)現(xiàn)spouts的核心接口镀梭,一些特定的接口是IRichSpout,BaseRichSpout踱启,KafkaSpout等报账。
Bolts:
Bolts是邏輯處理單元。Spouts將數(shù)據(jù)傳遞到Bolts和Bolts過程埠偿,并產(chǎn)生新的輸出流透罢。Bolts可以執(zhí)行過濾,聚合冠蒋,加入羽圃,與數(shù)據(jù)源和數(shù)據(jù)庫(kù)交互的操作。Bolts接收數(shù)據(jù)并發(fā)射到一個(gè)或多個(gè)Bolts抖剿。 “IBolt”是實(shí)現(xiàn)Bolts的核心接口朽寞。一些常見的接口是IRichBolt识窿,IBasicBolt等。
Apache Storm集群架構(gòu):
Nimbus(主節(jié)點(diǎn)):
Nimbus是Storm集群的主節(jié)點(diǎn)愁憔。集群中的所有其他節(jié)點(diǎn)稱為工作節(jié)點(diǎn)腕扶。主節(jié)點(diǎn)負(fù)責(zé)在所有工作節(jié)點(diǎn)之間分發(fā)數(shù)據(jù),向工作節(jié)點(diǎn)分配任務(wù)和監(jiān)視故障吨掌。
Supervisor(工作節(jié)點(diǎn))
遵循指令的節(jié)點(diǎn)被稱為Supervisors半抱。Supervisor有多個(gè)工作進(jìn)程,它管理工作進(jìn)程以完成由nimbus分配的任務(wù)膜宋。
Worker process(工作進(jìn)程)
工作進(jìn)程將執(zhí)行與特定拓?fù)湎嚓P(guān)的任務(wù)窿侈。工作進(jìn)程不會(huì)自己運(yùn)行任務(wù),而是創(chuàng)建執(zhí)行器并要求他們執(zhí)行特定的任務(wù)秋茫。工作進(jìn)程將有多個(gè)執(zhí)行器史简。
Executor(執(zhí)行者)
執(zhí)行器只是工作進(jìn)程產(chǎn)生的單個(gè)線程。執(zhí)行器運(yùn)行一個(gè)或多個(gè)任務(wù)肛著,但僅用于特定的spout或bolt圆兵。
Task(任務(wù)):
任務(wù)執(zhí)行實(shí)際的數(shù)據(jù)處理。所以枢贿,它是一個(gè)spout或bolt殉农。
ZooKeeper framework(ZooKeeper框架)
Apache的ZooKeeper的是使用群集(節(jié)點(diǎn)組)自己和維護(hù)具有強(qiáng)大的同步技術(shù)共享數(shù)據(jù)之間進(jìn)行協(xié)調(diào)的服務(wù)。Nimbus是無狀態(tài)的局荚,所以它依賴于ZooKeeper來監(jiān)視工作節(jié)點(diǎn)的狀態(tài)超凳。ZooKeeper的幫助supervisor與nimbus交互。它負(fù)責(zé)維持nimbus耀态,supervisor的狀態(tài)轮傍。
Storm是無狀態(tài)的。但是它把狀態(tài)存儲(chǔ)在Apache ZooKeeper中首装。由于狀態(tài)在Apache ZooKeeper中可用创夜,故障的網(wǎng)絡(luò)可以重新啟動(dòng),并從它離開的地方工作簿盅。通常挥下,像monit這樣的服務(wù)監(jiān)視工具將監(jiān)視Nimbus,并在出現(xiàn)任何故障時(shí)重新啟動(dòng)它桨醋。
Apache stom的 工作流程:
- 最初棚瘟,nimbus將等待“Storm拓?fù)洹碧峤唤o它。
- 一旦提交拓?fù)湎沧睿鼘⑻幚硗負(fù)洳⑹占獔?zhí)行的所有任務(wù)和任務(wù)將被執(zhí)行的順序偎蘸。
- 然后,nimbus將任務(wù)均勻分配給所有可用的supervisors。
- 在特定的時(shí)間間隔迷雪,所有supervisor將向nimbus發(fā)送心跳以通知它們?nèi)匀贿\(yùn)行著限书。
- 當(dāng)supervisor終止并且不向心跳發(fā)送心跳時(shí),則nimbus將任務(wù)分配給另一個(gè)supervisor章咧。
- 當(dāng)nimbus本身終止時(shí)倦西,supervisor將在沒有任何問題的情況下對(duì)已經(jīng)分配的任務(wù)進(jìn)行工作。
- 一旦所有的任務(wù)都完成后赁严,supervisor將等待新的任務(wù)進(jìn)去扰柠。
- 同時(shí),終止nimbus將由服務(wù)監(jiān)控工具自動(dòng)重新啟動(dòng)疼约。
- 重新啟動(dòng)的網(wǎng)絡(luò)將從停止的地方繼續(xù)卤档。同樣,終止supervisor也可以自動(dòng)重新啟動(dòng)程剥。由于網(wǎng)絡(luò)管理程序和supervisor都可以自動(dòng)重新啟動(dòng)劝枣,并且兩者將像以前一樣繼續(xù),因此Storm保證至少處理所有任務(wù)一次织鲸。
- 一旦處理了所有拓?fù)涮蛱冢瑒t網(wǎng)絡(luò)管理器等待新的拓?fù)涞竭_(dá),并且類似地搂擦,管理器等待新的任務(wù)琢唾。
Storm集群中有兩種模式:
- 本地模式 -此模式用于開發(fā),測(cè)試和調(diào)試盾饮,因?yàn)樗遣榭此型負(fù)浣M件協(xié)同工作的最簡(jiǎn)單方法。在這種模式下懒熙,我們可以調(diào)整參數(shù)丘损,使我們能夠看到我們的拓?fù)淙绾卧诓煌腟torm配置環(huán)境中運(yùn)行。在本地模式下工扎,storm拓?fù)湓诒镜貦C(jī)器上在單個(gè)JVM中運(yùn)行徘钥。
- 生產(chǎn)模式 -在這種模式下,我們將拓?fù)涮峤坏焦ぷ鱏torm集群肢娘,該集群由許多進(jìn)程組成呈础,通常運(yùn)行在不同的機(jī)器上。如在storm的工作流中所討論的橱健,工作集群將無限地運(yùn)行而钞,直到它被關(guān)閉。
Windows環(huán)境下Apache Storm 啟動(dòng):
啟動(dòng)Apache zookeep
zkCli.cmd
zkServer.cmd
啟動(dòng)Apache Storm
storm.py nimbus
storm.py supervisor
storm.py ui