Flume ng啟動過程分析

2021-06-21 05:30:21 字數 2335 閱讀 2371

入口函式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中讀取一段...