Storm核心組件:
Topology:Storm中運(yùn)行一個(gè)實(shí)時(shí)應(yīng)用程序的名稱格郁。
Nimbus:負(fù)責(zé)資源分配和任務(wù)調(diào)度。
Supervisor:負(fù)責(zé)接受nimbus分配的任務(wù)科阎,啟動(dòng)和停止屬于自己管理的worker進(jìn)程碗淌。---通過(guò)配置文件設(shè)置當(dāng)前supervisor上啟動(dòng)多少個(gè)worker port決定掩完。
spout:在一個(gè)topology中 會(huì)從外部數(shù)據(jù)源中讀取數(shù)據(jù)馆截,將外部數(shù)據(jù)源轉(zhuǎn)化成Storm內(nèi)部的數(shù)
據(jù)充活,以Tuple為基本的傳輸單元下發(fā)給Bolt。
Bolt:接受Spout發(fā)送的數(shù)據(jù)蜡娶,或上游的bolt的發(fā)送的數(shù)據(jù)混卵。根據(jù)業(yè)務(wù)邏輯進(jìn)行處理。發(fā)送給下一個(gè)Bolt或者是存儲(chǔ)到某種介質(zhì)上窖张。介質(zhì)可以是Redis可以是mysql幕随,或者其他。
Tuple:Storm內(nèi)部中數(shù)據(jù)傳輸?shù)幕締卧藿樱锩娣庋b了一個(gè)List對(duì)象赘淮,用來(lái)保存數(shù)據(jù)辕录。
StreamGrouping:數(shù)據(jù)分組策略
7種:shuffleGrouping(Random函數(shù)),Non Grouping(Random函數(shù)),FieldGrouping(Hash取模)、Local or ShuffleGrouping 本地或隨機(jī)梢卸,優(yōu)先本地走诞。
Task:一個(gè)Task屬于一個(gè)Spout或者Bolt并發(fā)任務(wù) worker中每一個(gè)spout/bolt的線程稱為一個(gè)task. 在storm0.8之后,task不再與物理線程對(duì)應(yīng)低剔,不同spout/bolt的task可能會(huì)共享一個(gè)物理線程,該線程稱為executor肮塞。
worker processes的數(shù)目, 可以通過(guò)配置文件和代碼中配置, worker就是執(zhí)行進(jìn)程, 所以考慮并發(fā)的效果, 數(shù)目至少應(yīng)該大亍machines的數(shù)目
executor的數(shù)目, component的并發(fā)線程數(shù)襟齿,只能在代碼中配置(通過(guò)setBolt和setSpout的參數(shù)), 例如, setBolt("green-bolt", new GreenBolt(), 2)
tasks的數(shù)目, 可以不配置, 默認(rèn)和executor1:1, 也可以通過(guò)setNumTasks()配置
Topology的worker數(shù)通過(guò)config設(shè)置,即執(zhí)行該topology的worker(java)進(jìn)程數(shù)枕赵。它可以通過(guò) storm rebalance 命令任意調(diào)整猜欺。
Config conf = newConfig();
conf.setNumWorkers(2); **//****用2個(gè)worker**
topologyBuilder.setSpout("blue-spout", newBlueSpout(), 2); **//****設(shè)置2個(gè)并發(fā)度**
topologyBuilder.setBolt("green-bolt", newGreenBolt(), 2).setNumTasks(4).shuffleGrouping("blue-spout"); **//****設(shè)置2個(gè)并發(fā)度,4個(gè)任務(wù)**
topologyBuilder.setBolt("yellow-bolt", newYellowBolt(), 6).shuffleGrouping("green-bolt"); **//****設(shè)置6個(gè)并發(fā)度**
StormSubmitter.submitTopology("mytopology", conf, topologyBuilder.createTopology());
并發(fā)度
3個(gè)組件的并發(fā)度加起來(lái)是10拷窜,就是說(shuō)拓?fù)湟还灿?0個(gè)executor开皿,一共有2個(gè)worker,每個(gè)worker產(chǎn)生10 / 2 = 5條線程篮昧。
綠色的bolt配置成2個(gè)executor和4個(gè)task赋荆。為此每個(gè)executor為這個(gè)bolt運(yùn)行2個(gè)task。
Storm文件提交流程;
Storm 的zookeeper目錄樹(shù)