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