更新時間:2019年10月10日18時05分 來源:傳智播客 瀏覽次數(shù):
基于Flume設(shè)計實現(xiàn)分層日志收集系統(tǒng),到底有什么好處呢?我們可以先看一下,如果不分層,會帶來哪些問題:
如果需要通過Kafka去緩沖上游基于Flume收集而構(gòu)建的日志流,對于數(shù)據(jù)平臺內(nèi)部服務(wù)器產(chǎn)生的數(shù)據(jù)還好,但是如果日志數(shù)據(jù)是跨業(yè)務(wù)組,甚至是跨部門,那么就需要將Kafka相關(guān)信息暴露給外部,這樣對Kafka的訪問便不是數(shù)據(jù)平臺內(nèi)部可控的。
如果是外部日志進(jìn)入平臺內(nèi)部HDFS,這樣如果需要對Hadoop系統(tǒng)進(jìn)行升級或例行維護(hù),這種直連的方式會影響到上游部署Flume的日志流的始端日志收集服務(wù)。
如果數(shù)據(jù)平臺內(nèi)部某些系統(tǒng),如Kafka集群、HDFS集群所在節(jié)點的機(jī)房位置變更,數(shù)據(jù)遷移,會使得依賴日志數(shù)據(jù)的外部系統(tǒng)受到不同程度的影響,外部系統(tǒng)需要相關(guān)開發(fā)或運維人員參與進(jìn)來。
由于收集日志的數(shù)據(jù)源端可能是外部一些服務(wù)器(多個單個的節(jié)點),一些業(yè)務(wù)集群(相互協(xié)作的多節(jié)點組),也可能是內(nèi)部一些提供收集服務(wù)的服務(wù)節(jié)點,這些所有的服務(wù)器上部署的Flume Agent都處于一層中,比較難于分組管理。
由于所有數(shù)據(jù)源端Flume Agent收集的日志進(jìn)入數(shù)據(jù)平臺的時候,沒有一個統(tǒng)一的類似總線的組件,很難因為某些業(yè)務(wù)擴(kuò)展而獨立地去升級數(shù)據(jù)平臺內(nèi)部的接收層服務(wù)節(jié)點,可能為了升級數(shù)據(jù)平臺內(nèi)部某個系統(tǒng)或服務(wù)而導(dǎo)致影響了其他的接收層服務(wù)節(jié)點?!就扑]了解大數(shù)據(jù)培訓(xùn)課程】
通過下圖我們可以看出,這種單層日志收集系統(tǒng)設(shè)計,存在太多的問題,而且系統(tǒng)或服務(wù)越多導(dǎo)致整個日志收集系統(tǒng)越難以控制:
上圖中,無論是外部還是內(nèi)部,只要部署了Flume Agent的節(jié)點,都直接同內(nèi)部的Kafka集群和Hadoop集群相連,所以在數(shù)據(jù)平臺內(nèi)部只能盡量保持Kafka和Hadoop集群正常穩(wěn)定運行,也要為外部日志收集Flume Agent的數(shù)據(jù)流量的陡增和異常變化做好防控準(zhǔn)備。再者,如需停機(jī)維護(hù)或者升級某一個集群,可能都需要通知外部所有Flume Agent所在節(jié)點的業(yè)務(wù)方,做好應(yīng)對(停機(jī))準(zhǔn)備。
接著看,如果我們基于Flume使用分層的方式來設(shè)計日志收集系統(tǒng),又有哪些優(yōu)勢,如下圖所示:
上圖中,F(xiàn)lume日志收集系統(tǒng)采用兩層架構(gòu)設(shè)計:第一層(L1)是日志收集層,第二層(L2)是數(shù)據(jù)平臺緩沖層(匯聚層)。通過這種方式,使得日志收集系統(tǒng)有如下特點:
針對數(shù)據(jù)平臺外部的業(yè)務(wù)系統(tǒng),根據(jù)需要分析的數(shù)據(jù)業(yè)務(wù)類型進(jìn)行分組,屬于同一種類型的業(yè)務(wù)日志,在數(shù)據(jù)平臺前端增加了一個Flume匯聚層節(jié)點組,該組節(jié)點只影響到它對應(yīng)的L1層的業(yè)務(wù)數(shù)據(jù)
如果Hadoop集群、Kafka需要停機(jī)維護(hù)或升級,對外部L1層Flume Agent沒有影響,只需要在L2層做好數(shù)據(jù)的接收與緩沖即可,待維護(hù)或升級結(jié)束,繼續(xù)將L2層緩存的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)存儲系統(tǒng)
如果外部某個類型的業(yè)務(wù)日志數(shù)據(jù)節(jié)點需要擴(kuò)容,直接在L1層將數(shù)據(jù)流指向數(shù)據(jù)平臺內(nèi)部與之相對應(yīng)的L2層Flume Agent節(jié)點組即可,能夠?qū)ν獠恳驑I(yè)務(wù)變化發(fā)生的新增日志收集需求,進(jìn)行快速地響應(yīng)和部署
對于數(shù)據(jù)平臺內(nèi)部,因為收集日志的節(jié)點非??煽兀梢灾苯油ㄟ^L1層Flume Agent使日志數(shù)據(jù)流入HDFS或Kafka,當(dāng)然為了架構(gòu)統(tǒng)一和管理,最好也是通過L2層Flume Agent節(jié)點組來匯聚/緩沖L1層Flume Agent收集的日志數(shù)據(jù)
通過上面分析可見,分層無非是為了使的日志數(shù)據(jù)源節(jié)點的Flume Agent服務(wù)與數(shù)據(jù)平臺的存儲系統(tǒng)(Kafka/HDFS)進(jìn)行解耦,同時能夠更好地對同類型業(yè)務(wù)多節(jié)點的日志流進(jìn)行一個聚合操作,并分離開獨立管理。另外,可以根據(jù)實際業(yè)務(wù)需要,適當(dāng)增加Flume系統(tǒng)分層,滿足日志流數(shù)據(jù)的匯聚需要。
應(yīng)用整體架構(gòu)
我們看一下,F(xiàn)lume日志收集系統(tǒng),在我們這個示例應(yīng)用中處于一個什么位置,我簡單畫了一下圖,加了一些有關(guān)數(shù)據(jù)處理和分析的節(jié)點/組件,如下圖所示:
這里,簡單了解一下上圖即可,由于日志收集在整個應(yīng)用系統(tǒng)中是很重要的一個環(huán)節(jié),所以必須保證日志收集系統(tǒng)設(shè)計的可靠、可用、靈活、穩(wěn)定,通過上面在日志收集系統(tǒng)收集日志之后,數(shù)據(jù)平臺所做的大量分析處理,來凸顯日志收集系統(tǒng)的重要性,這里其他內(nèi)容不做過多說明。