溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

flume架構(gòu)是怎么樣的

發(fā)布時間:2021-12-10 13:52:10 來源:億速云 閱讀:191 作者:小新 欄目:云計(jì)算

這篇文章主要介紹了flume架構(gòu)是怎么樣的,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

flume介紹

flume是一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸?shù)南到y(tǒng)。支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時,F(xiàn)lume提供對數(shù)據(jù)進(jìn)行簡單處理,并寫到各種數(shù)據(jù)接受方(比如文本、HDFS、Hbase等)的能力 。官方網(wǎng)站:http://flume.apache.org/

  1. flume架構(gòu)

flume架構(gòu)是怎么樣的

Flume采用了分層架構(gòu):分別為agent,collector和storage。用戶可以根據(jù)需要添加自己的的agent,collector或者storage。其中,agent和collector均有兩部分組成:source和sink,source是數(shù)據(jù)來源,sink是數(shù)據(jù)去向。(大三層和小三層一樣,也可以說flume分為source、channel和sink)

Flume核心概念

大的方面:

Agent使用JVM 運(yùn)行Flume。每臺機(jī)器運(yùn)行一個agent,但是可以在一個agent中包含多個sources和sinks。Collector將多個agent的數(shù)據(jù)收集后加載到storage中。

Storage存儲收集的數(shù)據(jù)。

Client生產(chǎn)數(shù)據(jù),運(yùn)行在一個獨(dú)立的線程。

小的方面:

Source從Client收集數(shù)據(jù),傳遞給Channel。
Sink從Channel收集數(shù)據(jù),運(yùn)行在一個獨(dú)立線程。
Channel連接 sources 和 sinks ,這個有點(diǎn)像一個隊(duì)列。
Events是flume的數(shù)據(jù)基本單位,可以是日志記錄、 avro 對象等。

Flume組件詳解

Source從Client收集數(shù)據(jù),傳遞給Channel。

Client端操作消費(fèi)數(shù)據(jù)的來源,F(xiàn)lume 支持 Avro,log4j,syslog 和 http post(body為json格式)??梢宰寫?yīng)用程序同已有的Source直接打交道,如AvroSource,SyslogTcpSource。也可以 寫一個 Source,以 IPC 或 RPC 的方式接入自己的應(yīng)用,Avro和 Thrift 都可以(分別有 NettyAvroRpcClient 和 ThriftRpcClient 實(shí)現(xiàn)了 RpcClient接口),其中 Avro 是默認(rèn)的 RPC 協(xié)議。具體代碼級別的 Client 端數(shù)據(jù)接入,可以參考官方手冊。

對現(xiàn)有程序改動最小的使用方式是使用是直接讀取程序原來記錄的日志文件,基本可以實(shí)現(xiàn)無縫接入,不需要對現(xiàn)有程序進(jìn)行任何改動。
對于直接讀取文件 Source,有兩種方式:

  • ExecSource: 以運(yùn)行 Linux 命令的方式,持續(xù)的輸出最新的數(shù)據(jù),如tail -F 文件名指令,在這種方式下,取的文件名必須是指定的。 ExecSource 可以實(shí)現(xiàn)對日志的實(shí)時收集,但是存在Flume不運(yùn)行或者指令執(zhí)行出錯時,將無法收集到日志數(shù)據(jù),無法保證日志數(shù)據(jù)的完整性。

  • SpoolSource: 監(jiān)測配置的目錄下新增的文件,并將文件中的數(shù)據(jù)讀取出來。需要注意兩點(diǎn):拷貝到 spool 目錄下的文件不可以再打開編輯;spool 目錄下不可包含相應(yīng)的子目錄。

SpoolSource 雖然無法實(shí)現(xiàn)實(shí)時的收集數(shù)據(jù),但是可以使用以分鐘的方式分割文件,趨近于實(shí)時。

如果應(yīng)用無法實(shí)現(xiàn)以分鐘切割日志文件的話, 可以兩種收集方式結(jié)合使用。 在實(shí)際使用的過程中,可以結(jié)合 log4j 使用,使用 log4j的時候,將 log4j 的文件分割機(jī)制設(shè)為1分鐘一次,將文件拷貝到spool的監(jiān)控目錄。

log4j 有一個 TimeRolling 的插件,可以把 log4j 分割文件到 spool 目錄?;緦?shí)現(xiàn)了實(shí)時的監(jiān)控。Flume 在傳完文件之后,將會修改文件的后綴,變?yōu)?.COMPLETED(后綴也可以在配置文件中靈活指定)

Channel連接 sources 和 sinks ,這個有點(diǎn)像一個隊(duì)列

當(dāng)前有幾個 channel 可供選擇,分別是 Memory Channel, JDBC Channel , File Channel,Psuedo Transaction Channel。比較常見的是前三種 channel。

  • MemoryChannel 可以實(shí)現(xiàn)高速的吞吐,但是無法保證數(shù)據(jù)的完整性。

  • MemoryRecoverChannel 在官方文檔的建議上已經(jīng)建義使用FileChannel來替換。

  • FileChannel保證數(shù)據(jù)的完整性與一致性。在具體配置FileChannel時,建議FileChannel設(shè)置的目錄和程序日志文件保存的目錄設(shè)成不同的磁盤,以便提高效率。

File Channel 是一個持久化的隧道(channel),它持久化所有的事件,并將其存儲到磁盤中。因此,即使 Java 虛擬機(jī)當(dāng)?shù)?,或者操作系統(tǒng)崩潰或重啟,再或者事件沒有在管道中成功地傳遞到下一個代理(agent),這一切都不會造成數(shù)據(jù)丟失。Memory Channel 是一個不穩(wěn)定的隧道,其原因是由于它在內(nèi)存中存儲所有事件。如果 java 進(jìn)程死掉,任何存儲在內(nèi)存的事件將會丟失。另外,內(nèi)存的空間收到 RAM大小的限制,而 File Channel 這方面是它的優(yōu)勢,只要磁盤空間足夠,它就可以將所有事件數(shù)據(jù)存儲到磁盤上。

Sink從Channel收集數(shù)據(jù),運(yùn)行在一個獨(dú)立線程。

Sink在設(shè)置存儲數(shù)據(jù)時,可以向文件系統(tǒng)、數(shù)據(jù)庫、hadoop存數(shù)據(jù),在日志數(shù)據(jù)較少時,可以將數(shù)據(jù)存儲在文件系中,并且設(shè)定一定的時間間隔保存數(shù)據(jù)。在日志數(shù)據(jù)較多時,可以將相應(yīng)的日志數(shù)據(jù)存儲到Hadoop中,便于日后進(jìn)行相應(yīng)的數(shù)據(jù)分析. collectorSink("fsdir","fsfileprefix",rollmillis):collectorSink,數(shù)據(jù)通過collector匯聚之后發(fā)送到hdfs, fsdir 是hdfs目錄,fsfileprefix為文件前綴碼。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“flume架構(gòu)是怎么樣的”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI