Flume 原始碼解析 元件生命週期

2021-08-09 17:47:30 字數 2938 閱讀 8411

apache flume 是資料倉儲體系中用於做實時 etl 的工具。它提供了豐富的資料來源和寫入元件,這些元件在執行時都由 flume 的生命週期管理機制進行監控和維護。本文將對這部分功能的原始碼進行解析。

/flume-ng

-node

/flume-ng

-code

/flume-ng

-sdk

/flume-ng

-sources/flume-kafka

-source

/flume-ng

-channels/flume-kafka

-channel

/flume-ng

-sinks/flume-hdfs

-sink

public

class

public

static

void

main(string args) else

} else

runtime.getruntime().addshutdownhook(new thread("agent-shutdown-hook")

});}}

啟動過程說明如下:

使用commons-cli對命令列引數進行解析,提取 agent 名稱、配置資訊讀取方式及其路徑資訊;

配置資訊可以通過檔案或 zookeeper 的方式進行讀取,兩種方式都支援熱載入,即我們不需要重啟 agent 就可以更新配置內容:

如果熱更新未開啟,則配置提供方將在啟動時立刻讀取配置檔案,並由lifecyclesupervisor啟動和管理所有元件。

@subscribe

public

synchronized

void

handleconfigurationevent(materializedconfiguration conf)

// pollingpropertiesfileconfigurationprovider$filewatcherrunnable 內部類

@override

public

void

run()

private

void

startallcomponents(materializedconfiguration materializedconfiguration)

// 等待所有管道啟動完畢

for (channel ch : materializedconfiguration.getchannels().values())

} // 相繼啟動目的地和資料來源元件

}

lifecyclesupervisor類(**中的supervisor變數)可用於管理實現了lifecycleaware介面的元件。該類會初始化乙個monitorrunnable,每三秒輪詢一次元件狀態,通過lifecycleaware#startstop方法,保證其始終處於desiredstate變數所指定的狀態。

public

static

class

monitorrunnable

implements

runnable

}}}

public

class

lifecyclesupervisor

implements

lifecycleaware

}}}

對於單個元件的生命週期,我們以kafkasource為例:

public

class

kafkasource

extends

abstractpollablesource

@override

protected

void

dostop() throws flumeexception

}

kafkasource被定義成輪詢式的資料來源,也就是說我們需要使用乙個執行緒不斷對其進行輪詢,檢視是否有資料可以供處理:

public

class

pollablesourcerunner

extends

sourcerunner

@override

public

void

stop()

// 輪詢執行緒

public

static

class

pollingrunner

implements

runnable

}}}

abstractpollablesourcesourcerunner都實現了lifecycleaware介面,因此都有startstop方法。但是,只有sourcerunner會由lifecyclesupervisor管理,pollablesource則是附屬於sourcerunner的乙個元件。我們可以在abstractconfigurationprovider#loadsources中看到配置關係:

private

void

loadsources(mapsourcerunnermap)

Flume簡介 原始碼編譯

flume og flume original generation,即flume 0.9.x版本 flume ng flume next generation 即flume 1.x版本 現在一般叫flume ng,也是使用最為廣泛的 agent用於採集資料,agent是flume中產生資料流的地方...

pomelo原始碼解析之元件Remote

首先提出問題 1.元件remote是什麼?2.remote的作用是什麼?remote模組是遠端通訊模組服務端監聽模組,作用是作為各個模組間通訊物件的存在。變數中儲存.return paths var paths var role master server should not come here ...

Fabric 原始碼解析 原始碼目錄解析

這裡對重要的一些目錄進行說明 bccsp 與密碼學 加密 簽名 證書等等 相關的加密服務 將fabric中用到的密碼學相關的函式抽象成了一組介面,便於拓展。bddtests 一種新型的軟體開發模式 行為驅動開 需求 開發 common 一些公共庫 錯誤處理 日誌處理 賬本儲存 策略以及各種工具等等 ...