轉:https://www.cnblogs.com/gongxijun/p/5656778.html
1 .背景
flume是由cloudera軟件公司產出的可分佈式日誌收集系統,後與2009年被捐贈了apache軟件基金會,爲hadoop相關組件之一。尤其近幾年隨着flume的不斷被完善以及升級版本的逐一推出,特別是flume-ng;同時flume內部的各種組件不斷豐富,用戶在開發的過程中使用的便利性得到很大的改善,現已成爲apache top項目之一.
2 .概述
1. 什麼是flume?
apache Flume 是一個從可以收集例如日誌,事件等數據資源,並將這些數量龐大的數據從各項數據資源中集中起來存儲的工具/服務,或者數集中機制。flume具有高可用,分佈式,配置工具,其設計的原理也是基於將數據流,如日誌數據從各種網站服務器上彙集起來存儲到HDFS,HBase等集中存儲器中。其結構如下圖所示:
2.應用場景
比如我們在做一個電子商務網站,然後我們想從消費用戶中訪問點特定的節點區域來分析消費者的行爲或者購買意圖. 這樣我們就可以更加快速的將他想要的推送到界面上,實現這一點,我們需要將獲取到的她訪問的頁面以及點擊的產品數據等日誌數據信息收集並移交給Hadoop平臺上去分析.而Flume正是幫我們做到這一點。現在流行的內容推送,比如廣告定點投放以及新聞私人定製也是基於次,不過不一定是使用FLume,畢竟優秀的產品很多,比如facebook的Scribe,還有Apache新出的另一個明星項目chukwa,還有淘寶Time
Tunnel。
3.Flume的優勢
1. Flume可以將應用產生的數據存儲到任何集中存儲器中,比如HDFS,HBase
2. 當收集數據的速度超過將寫入數據的時候,也就是當收集信息遇到峯值時,這時候收集的信息非常大,甚至超過了系統的寫入數據能力,這時候,Flume會在數據生產者和數據收容器間做出調整,保證其能夠在兩者之間提供一共平穩的數據.
3. 提供上下文路由特徵
4. Flume的管道是基於事務,保證了數據在傳送和接收時的一致性.
5. Flume是可靠的,容錯性高的,可升級的,易管理的,並且可定製的。
4. Flume具有的特徵:
1. Flume可以高效率的將多個網站服務器中收集的日誌信息存入HDFS/HBase中
2. 使用Flume,我們可以將從多個服務器中獲取的數據迅速的移交給Hadoop中
3. 除了日誌信息,Flume同時也可以用來接入收集規模宏大的社交網絡節點事件數據,比如facebook,twitter,電商網站如亞馬遜,flipkart等
4. 支持各種接入資源數據的類型以及接出數據類型
5. 支持多路徑流量,多管道接入流量,多管道接出流量,上下文路由等
6. 可以被水平擴展
3. Flume的結構
1. flume的外部結構:
如上圖所示,數據發生器(如:facebook,twitter)產生的數據被被單個的運行在數據發生器所在服務器上的agent所收集,之後數據收容器從各個agent上彙集數據並將採集到的數據存入到HDFS或者HBase中
2. Flume 事件
事件作爲Flume內部數據傳輸的最基本單元.它是由一個轉載數據的字節數組(該數據組是從數據源接入點傳入,並傳輸給傳輸器,也就是HDFS/HBase)和一個可選頭部構成.
典型的Flume 事件如下面結構所示:
我們在將event在私人定製插件時比如:flume-hbase-sink插件是,獲取的就是event然後對其解析,並依據情況做過濾等,然後在傳輸給HBase或者HDFS.
3.Flume Agent
我們在瞭解了Flume的外部結構之後,知道了Flume內部有一個或者多個Agent,然而對於每一個Agent來說,它就是一共獨立的守護進程(JVM),它從客戶端哪兒接收收集,或者從其他的 Agent哪兒接收,然後迅速的將獲取的數據傳給下一個目的節點sink,或者agent. 如下圖所示flume的基本模型
Agent主要由:source,channel,sink三個組件組成.
Source:
從數據發生器接收數據,並將接收的數據以Flume的event格式傳遞給一個或者多個通道channal,Flume提供多種數據接收的方式,比如Avro,Thrift,twitter1%等
Channel:
channal是一種短暫的存儲容器,它將從source處接收到的event格式的數據緩存起來,直到它們被sinks消費掉,它在source和sink間起着一共橋樑的作用,channal是一個完整的事務,這一點保證了數據在收發的時候的一致性. 並且它可以和任意數量的source和sink鏈接. 支持的類型有: JDBC channel , File System channel , Memort channel等.
sink:
sink將數據存儲到集中存儲器比如Hbase和HDFS,它從channals消費數據(events)並將其傳遞給目標地. 目標地可能是另一個sink,也可能HDFS,HBase.
它的組合形式舉例:
以上介紹的flume的主要組件,下面介紹一下Flume插件:
1. Interceptors攔截器
用於source和channel之間,用來更改或者檢查Flume的events數據
2. 管道選擇器 channels Selectors
在多管道是被用來選擇使用那一條管道來傳遞數據(events). 管道選擇器又分爲如下兩種:
默認管道選擇器: 每一個管道傳遞的都是相同的events
多路複用通道選擇器: 依據每一個event的頭部header的地址選擇管道.
3.sink線程