入口函式main():
...
//載入flume的配置檔案,初始化sink,source,channel的工廠類
propertiesfileconfigurationprovider configurationprovider =
new propertiesfileconfigurationprovider(agentname,
configurationfile);
中例項化sink,source,channel
//map用於儲存所有sink,source,channel
mapchannelcomponentmap = maps.newhashmap();
mapsourcerunnermap = maps.newhashmap();
mapsinkrunnermap = maps.newhashmap();
//先例項化channel
loadchannels(agentconf, channelcomponentmap);
//將source對應的channel註冊到channelselector,source通過channelselector獲取channel
loadsources(agentconf, channelcomponentmap, sourcerunnermap);
//向sink註冊channel
loadsinks(agentconf, channelcomponentmap, sinkrunnermap);
...conf.addchannel(channelname, channelcomponent.channel);
...for(map.entryentry : sourcerunnermap.entryset())
for(map.entryentry : sinkrunnermap.entryset())
...return conf
...stopallcomponents();
startallcomponents(conf);
//關閉程式時,呼叫的鉤子
runtime.getruntime().addshutdownhook(new thread("agent-shutdown-hook")
});
startallcomponents(conf):
//通過lifecyclesupervisor類啟動元件
//啟動monitorrunnable,監控channel
for (entryentry :
materializedconfiguration.getchannels().entryset()) catch (exception e)", entry.getvalue(), e);}}
//等待啟動
for(channel ch: materializedconfiguration.getchannels().values()) catch (interruptedexception e) }}
//啟動monitorrunnable,監控sink
for (entryentry : materializedconfiguration.getsinkrunners()
.entryset()) catch (exception e) ", entry.getvalue(), e);}}
//啟動monitorrunnable,監控source
for (entryentry : materializedconfiguration
.getsourcerunners().entryset()) catch (exception e) ", entry.getvalue(), e);}}
this.loadmonitoring();
負責啟動和監控flume元件的類,功能如:失敗重啟元件
lifecyclesupervisor內部比較重要的幾個變數:
//監控程序的執行緒池
scheduledthreadpoolexecutor monitorservice
mapscheduledfuture
<?>> monitorfutures
mapsupervisoree> supervisedprocesses
//啟動監控
public
synchronized
void supervise(lifecycleaware lifecycleaware,
supervisorpolicy policy, lifecyclestate desiredstate)
Flume ng 1 6啟動過程原始碼分析 二
1.configurationprovider介面,提供了getconfiguration 方法,用於獲取不同元件的配置。2.lifecycleaware介面,提供了三個方法,start stop 和getlifecyclestate 分別用於元件的啟動 停止以及元件在生命週期中處的狀態,可以說這個...
ARM Linux啟動過程分析
5 呼叫 linux核心映像 bootloader完成的最後一項工作便是呼叫 linux核心。如果 linux 核心存放在 flash 中,並且可直接在上面執行 這裡的 flash 指 nor flash 那麼可直接跳轉到核心中去執行。但由於在 flash 中執行 會有種種限制,而且速度也遠不及 r...
Linux啟動過程分析
boot loader 當cpu一上電,此時cpu必須從nor flash或者nand flash中取指令 直接從 nand flash取指令的ap為支援nand 啟動 nand boot 其實原理就是ap 內部的rom裡有一小段 包括nand flash驅動,它啟動從nand flash中讀取一段...