Flume一文深入淺出
本文來源:http://r6d.cn/bdvqa
Flume簡介
Flume概述:
Flume是開源日志系統(tǒng)。是一個分布式、可靠性和高可用的海量日志聚合系統(tǒng),支持在系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時,F(xiàn)Lume提供對數(shù)據(jù)進行簡單處理,并寫到各種數(shù)據(jù)接收方(可定制)的能力。
Flume是什么?
Flume是流式日志采集工具,F(xiàn)Lume提供對數(shù)據(jù)進行簡單處理并且寫到各種數(shù)據(jù)接收方(可定制)的能力,F(xiàn)lume提供從本地文件(spooling directory source)、實時日志(taildir、exec)、REST消息、Thift、Avro、Syslog、Kafka等數(shù)據(jù)源上收集數(shù)據(jù)的能力。
Flume能干什么?
提供從固定目錄下采集日志信息到目的地(HDFS,HBase,Kafka)能力。 提供實時采集日志信息(taidir)到目的地的能力。 FLume支持級聯(lián)(多個Flume對接起來),合并數(shù)據(jù)的能力。 Flume支持按照用戶定制采集數(shù)據(jù)的能力。
Flume在FusionInsight中的位置:

圖:Flume在FusionInsight中的位置
Flume是收集、聚合事件流數(shù)據(jù)的分布式框架。
Flume系統(tǒng)架構(gòu)
Flume基礎架構(gòu):

圖:Flume基礎架構(gòu)圖
Flume基礎架構(gòu):Flume可以單節(jié)點直接采集數(shù)據(jù),主要應用于集群內(nèi)數(shù)據(jù)。
Flume多agent架構(gòu):

圖:Flume多agent架構(gòu)
Flume多agent架構(gòu):Flume可以將多個節(jié)點連接起來,將最初的數(shù)據(jù)源經(jīng)過收集,存儲到最終的存儲系統(tǒng)中。主要應用于集群外的數(shù)據(jù)導入到集群內(nèi)。
Flume架構(gòu):

圖:Flume架構(gòu)圖
各組件具體介紹如下:
events:Flume當中對數(shù)據(jù)的一種封裝。是一個數(shù)據(jù)單元。flume傳輸數(shù)據(jù)最基本的單元。
Interceptor:攔截器,主要作用是將采集到的數(shù)據(jù)根據(jù)用戶的配置進行過濾和修飾。
Channel Selector:通道選擇器,主要作用是根據(jù)用戶配置將數(shù)據(jù)放到不同的Channel當中。
Channel:主要作用是臨時的緩存數(shù)據(jù)。
Sink Runner:sink的運行器,主要是通過它來驅(qū)動Sink Processor,Sink Processor驅(qū)動Sink來從Channel當中獲取數(shù)據(jù)。
Sink Processor:主要策略有,負載均衡,故障轉(zhuǎn)移以及直通。
Sink:主要作用是從Channel當中取出數(shù)據(jù),并將數(shù)據(jù)放到不同的目的地。
基本概念- Source:
Source負責接收events或通過特殊機制產(chǎn)生events,并將events批量放到一個或多個Channels。有驅(qū)動和輪詢2中類型的Source。
驅(qū)動型Source:是外部主動發(fā)送數(shù)據(jù)給Flume,驅(qū)動Flume接收數(shù)據(jù)。 輪詢source:是FLume周期性主動去獲取數(shù)據(jù)。
Source必須至少和一個channel關聯(lián)。
Source的類型如下:

基本概念 - Channel:
Channel位于Source和Sink之間,Channel的作用類似隊列,用于臨時緩存進來的events,當Sink成功地將events發(fā)送到下一跳的channel或最終目的,events從Channel移除。
不同的Channel提供的持久化水平也是不一樣的:
Memory Channel:不會持久化。消息存放在內(nèi)存中,提供高吞吐,但提供可靠性;可能丟失數(shù)據(jù)。 File Channel:對數(shù)據(jù)持久化;基于WAL(預寫式日志W(wǎng)rite-Ahaad Log)實現(xiàn)。但是配置較為麻煩,需要配置數(shù)據(jù)目錄和checkpoint目錄;不同的file channel均需要配置一個checkpoint目錄。 JDBC Channel:基于嵌入式Database實現(xiàn)。內(nèi)置derby數(shù)據(jù)庫,對event進行了持久化,提供高可靠性;可以取代同樣持久特性的file channel。
Channels支持事物,提供較弱的順序保證,可以連接任何數(shù)量的Source和Sink。
基本概念 - Sink:
Sink負責將events傳輸?shù)较乱惶蜃罱K目的,成功完成后將events從channel移除。
必須作用于一個確切的channel。
Sink類型:

Flume關鍵特性介紹
Flume支持采集日志文件:

圖:Flume采集日志文件
Flume支持將集群外的日志文件采集并歸檔到HDFS、HBase、Kafka上,供上層應用對數(shù)據(jù)分析、清洗數(shù)據(jù)使用。
Flume支持多級級聯(lián)和多路復制:

圖:Flume級聯(lián)
Flume支持將多個Flume級聯(lián)起來,同時級聯(lián)節(jié)點內(nèi)部支持數(shù)據(jù)復制。
這個場景主要應用于:收集FusionInsight集群外上的節(jié)點上的日志,并通過多個Flume節(jié)點,最終匯聚到集群當中。
Flume級聯(lián)消息壓縮、加密:

圖:Flume級聯(lián)消息壓縮、加密
Flume級聯(lián)節(jié)點之間的數(shù)據(jù)傳輸支持壓縮和加密,提升數(shù)據(jù)傳輸效率和安全性。
在同一個Flume內(nèi)部進行傳輸時,不需要加密,為進程內(nèi)部的數(shù)據(jù)交換。
Flume數(shù)據(jù)監(jiān)控:

圖:Flume數(shù)據(jù)監(jiān)控
Source接收的數(shù)據(jù)量,Channel緩存的數(shù)據(jù)量,Sink寫入的數(shù)據(jù)量,這些都可以通過Manager圖形化界面呈現(xiàn)出來。
Flume傳輸可靠性:

圖:Flume傳輸可靠性原理
Flume在傳輸數(shù)據(jù)過程中,采用事物管理方式,保證數(shù)據(jù)傳輸過程中數(shù)據(jù)不會丟失,增強了數(shù)據(jù)傳輸?shù)目煽啃?,同時緩存在channel中的數(shù)據(jù)如果采用了file channel,進程或者節(jié)點重啟數(shù)據(jù)不會丟失。

圖:Flume傳輸過程中出錯情況
Flume在傳輸數(shù)據(jù)過程中,如果下一跳的Flume節(jié)點故障或者數(shù)據(jù)接收異常時,可以自動切換到另外一路上繼續(xù)傳輸。
Flume傳輸過程中數(shù)據(jù)過濾:

圖:過濾原理 Flume在傳輸數(shù)據(jù)過程中,可以見到的對數(shù)據(jù)簡單過濾、清洗,可以去掉不關心的數(shù)據(jù),同時如果需要對復雜的數(shù)據(jù)過濾,需要用戶根據(jù)自己的數(shù)據(jù)特殊性,開發(fā)過濾插件,F(xiàn)lume支持第三方過濾插件調(diào)用
