在互聯網迅猛發展的今天 各大廠發揮十八般武藝的收集用戶的各種信息,甚至包括點擊的位置,我們也經常發現自己剛搜完一個東西,再打開網頁時每個小廣告都會出現與之相關聯的商品或信息,在感嘆智能的同時不驚想 什么時候泄露的行蹤。
許多公司的業務平台每天都會產生大量的日志數據。收集業務日志數據,供離線和在線的分析系統使用,正是日志收集系統的要做的事情。
用戶的數據除了這種后台默默的收集外,還有各種運行的日志數據和后台操作日志,因此每個業務可以算是一種類型的日志,那稍大點的公司就會有幾十種日志類型要收集,而且業務都分布到不同的服務器上,這就導致了日志的匯集的困難,
在此可以用Flume來解決此類問題,參考以下架構。
Flume是Cloudera提供的一個高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸的系統,目前已經是Apache的一個子項目。
Flume作為一個日志收集工具,非常輕量級,基於一個個Flume Agent,能夠構建一個很復雜很強大的日志收集系統,它的靈活性和優勢, 高可用性,高可靠性和可擴展性是日志收集系統所具有的基本特征。主要體現在如下幾點:
- 模塊化設計:在其Flume Agent內部可以定義三種組件:Source、Channel、Sink
- 組合式設計:可以在Flume Agent中根據業務需要組合Source、Channel、Sink三種組件,構建相對復雜的日志流管道
- 插件式設計:可以通過配置文件來編排收集日志管道的流程,減少對Flume代碼的侵入性
- 可擴展性:我們可以根據自己業務的需要來定制實現某些組件(Source、Channel、Sink)
- 支持集成各種主流系統和框架:像Hadoop、HBase、Hive、Kafka、ElasticSearch、Thrift、Avro等,都能夠很好的和Flume集成
- 高級特性:Failover、Load balancing、Interceptor等
Flume的優勢
1. Flume可以將應用產生的數據存儲到任何集中存儲器中,比如HDFS,HBase
2. 當收集數據的速度超過將寫入數據的時候,也就是當收集信息遇到峰值時,這時候收集的信息非常大,甚至超過了系統的寫入數據能力,這時候,Flume會在數據生產者和數據收容器間做出調整,保證其能夠在兩者之間提供一共平穩的數據.
3. 提供上下文路由特征
4. Flume的管道是基於事務,保證了數據在傳送和接收時的一致性.
5. Flume是可靠的,容錯性高的,可升級的,易管理的,並且可定制的。
Flume具有的特征:
1. Flume可以高效率的將多個網站服務器中收集的日志信息存入HDFS/HBase中
2. 使用Flume,我們可以將從多個服務器中獲取的數據迅速的移交給Hadoop中
3. 除了日志信息,Flume同時也可以用來接入收集規模宏大的社交網絡節點事件數據,比如facebook,twitter,電商網站如亞馬遜,flipkart等
4. 支持各種接入資源數據的類型以及接出數據類型
5. 支持多路徑流量,多管道接入流量,多管道接出流量,上下文路由等
6. 可以被水平擴展
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線程
用於激活被選擇的sinks群中特定的sink,用於負載均衡.
由於Flume的日志源可以來自另外一個Flume,可以同時發送給多個目標,且Flume自身可以做負載,由此可以設計出高可用,可擴展,高負載的日志架構。
應用場景
比如我們在做一個電子商務網站,然后我們想從消費用戶中訪問點特定的節點區域來分析消費者的行為或者購買意圖. 這樣我們就可以更加快速的將他想要的推送到界面上,實現這一點,我們需要將獲取到的她訪問的頁面以及點擊的產品數據等日志數據信息收集並移交給Hadoop平台上去分析.而Flume正是幫我們做到這一點。現在流行的內容推送,比如廣告定點投放以及新聞私人定制也是基於次,不過不一定是使用FLume,畢竟優秀的產品很多,比如facebook的Scribe,還有Apache新出的另一個明星項目chukwa,還有淘寶Time Tunnel。
flume+kafka+storm+mysql構建大數據實時系統
Flume+HDFS+KafKa+Strom實現實時推薦,反爬蟲服務等服務在美團的應用
Flume+Hadoop+Hive的離線分析網站用戶瀏覽行為路徑
Flume+Logstash+Kafka+Spark Streaming進行實時日志處理分析
Flume+Spark + ELK新浪數據系統實時監控平台
列舉不完了 ……………………………………………………………………