在互聯(lián)網(wǎng)迅猛發(fā)展的今天 各大廠發(fā)揮十八般武藝的收集用戶的各種信息约素,甚至包括點擊的位置,我們也經(jīng)常發(fā)現(xiàn)自己剛搜完一個東西笆凌,再打開網(wǎng)頁時每個小廣告都會出現(xiàn)與之相關聯(lián)的商品或信息圣猎,在感嘆智能的同時不驚想 什么時候泄露的行蹤。
許多公司的業(yè)務平臺每天都會產(chǎn)生大量的日志數(shù)據(jù)乞而。收集業(yè)務日志數(shù)據(jù)送悔,供離線和在線的分析系統(tǒng)使用,正是日志收集系統(tǒng)的要做的事情爪模。
用戶的數(shù)據(jù)除了這種后臺默默的收集外欠啤,還有各種運行的日志數(shù)據(jù)和后臺操作日志,因此每個業(yè)務可以算是一種類型的日志屋灌,那稍大點的公司就會有幾十種日志類型要收集洁段,而且業(yè)務都分布到不同的服務器上,這就導致了日志的匯集的困難共郭,
在此可以用Flume來解決此類問題祠丝,參考以下架構。
Flume是Cloudera提供的一個高可用的除嘹,高可靠的写半,分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng)尉咕,目前已經(jīng)是Apache的一個子項目叠蝇。
Flume作為一個日志收集工具,非常輕量級龙考,基于一個個Flume Agent蟆肆,能夠構建一個很復雜很強大的日志收集系統(tǒng)矾睦,它的靈活性和優(yōu)勢,?高可用性炎功,高可靠性和可擴展性是日志收集系統(tǒng)所具有的基本特征枚冗。主要體現(xiàn)在如下幾點:
模塊化設計:在其Flume Agent內(nèi)部可以定義三種組件:Source、Channel蛇损、Sink
組合式設計:可以在Flume Agent中根據(jù)業(yè)務需要組合Source赁温、Channel、Sink三種組件淤齐,構建相對復雜的日志流管道
插件式設計:可以通過配置文件來編排收集日志管道的流程股囊,減少對Flume代碼的侵入性
可擴展性:我們可以根據(jù)自己業(yè)務的需要來定制實現(xiàn)某些組件(Source、Channel更啄、Sink)
支持集成各種主流系統(tǒng)和框架:像Hadoop稚疹、HBase、Hive祭务、Kafka内狗、ElasticSearch、Thrift义锥、Avro等柳沙,都能夠很好的和Flume集成
高級特性:Failover、Load balancing拌倍、Interceptor等
Flume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方赂鲤,用于收集數(shù)據(jù);同時柱恤,F(xiàn)lume提供對數(shù)據(jù)進行簡單處理数初,并寫到各種數(shù)據(jù)接受方(可定制)的能力。
注:當前Flume有兩個版本Flume 0.9X版本的統(tǒng)稱Flume-og膨更,F(xiàn)lume1.X版本的統(tǒng)稱Flume-ng妙真。由于Flume-ng經(jīng)過重大重構,與Flume-og有很大不同荚守,使用時請注意區(qū)分珍德。
Flume的優(yōu)勢
1. ?Flume可以將應用產(chǎn)生的數(shù)據(jù)存儲到任何集中存儲器中,比如HDFS,HBase
2. ?當收集數(shù)據(jù)的速度超過將寫入數(shù)據(jù)的時候矗漾,也就是當收集信息遇到峰值時锈候,這時候收集的信息非常大,甚至超過了系統(tǒng)的寫入數(shù)據(jù)能力敞贡,這時候泵琳,F(xiàn)lume會在數(shù)據(jù)生產(chǎn)者和數(shù)據(jù)收容器間做出調(diào)整,保證其能夠在兩者之間提供一共平穩(wěn)的數(shù)據(jù).
3. ? 提供上下文路由特征
4. ? Flume的管道是基于事務,保證了數(shù)據(jù)在傳送和接收時的一致性.
5. ? Flume是可靠的获列,容錯性高的谷市,可升級的,易管理的,并且可定制的击孩。
Flume具有的特征:
1. Flume可以高效率的將多個網(wǎng)站服務器中收集的日志信息存入HDFS/HBase中
2. 使用Flume迫悠,我們可以將從多個服務器中獲取的數(shù)據(jù)迅速的移交給Hadoop中
3. 除了日志信息,F(xiàn)lume同時也可以用來接入收集規(guī)模宏大的社交網(wǎng)絡節(jié)點事件數(shù)據(jù)巩梢,比如facebook,twitter,電商網(wǎng)站如亞馬遜创泄,flipkart等
4. 支持各種接入資源數(shù)據(jù)的類型以及接出數(shù)據(jù)類型
5. 支持多路徑流量,多管道接入流量括蝠,多管道接出流量鞠抑,上下文路由等
6. 可以被水平擴展
Flume的結構
Agent主要由:source,channel,sink三個組件組成.
Source:
從數(shù)據(jù)發(fā)生器接收數(shù)據(jù),并將接收的數(shù)據(jù)以Flume的event格式傳遞給一個或者多個通道channal,Flume提供多種數(shù)據(jù)接收的方式,比如Avro,Thrift,twitter1%等
Channel:
channal是一種短暫的存儲容器,它將從source處接收到的event格式的數(shù)據(jù)緩存起來,直到它們被sinks消費掉,它在source和sink間起著一共橋梁的作用,channal是一個完整的事務,這一點保證了數(shù)據(jù)在收發(fā)的時候的一致性. 并且它可以和任意數(shù)量的source和sink鏈接. 支持的類型有: JDBC channel , File System channel , Memort channel等.
sink:
sink將數(shù)據(jù)存儲到集中存儲器比如Hbase和HDFS,它從channals消費數(shù)據(jù)(events)并將其傳遞給目標地. 目標地可能是另一個sink,也可能HDFS,HBase.
它的組合形式舉例:
以上介紹的flume的主要組件
下面介紹一下Flume插件:
1. Interceptors攔截器
用于source和channel之間,用來更改或者檢查Flume的events數(shù)據(jù)
2. 管道選擇器 channels Selectors
在多管道是被用來選擇使用那一條管道來傳遞數(shù)據(jù)(events).?管道選擇器又分為如下兩種:
默認管道選擇器: ?每一個管道傳遞的都是相同的events
多路復用通道選擇器: ?依據(jù)每一個event的頭部header的地址選擇管道.
3.sink線程
用于激活被選擇的sinks群中特定的sink,用于負載均衡.
由于Flume的日志源可以來自另外一個Flume,可以同時發(fā)送給多個目標忌警,且Flume自身可以做負載搁拙,由此可以設計出高可用,可擴展慨蓝,高負載的日志架構感混。
應用場景
比如我們在做一個電子商務網(wǎng)站,然后我們想從消費用戶中訪問點特定的節(jié)點區(qū)域來分析消費者的行為或者購買意圖. 這樣我們就可以更加快速的將他想要的推送到界面上礼烈,實現(xiàn)這一點,我們需要將獲取到的她訪問的頁面以及點擊的產(chǎn)品數(shù)據(jù)等日志數(shù)據(jù)信息收集并移交給Hadoop平臺上去分析.而Flume正是幫我們做到這一點∑排埽現(xiàn)在流行的內(nèi)容推送此熬,比如廣告定點投放以及新聞私人定制也是基于次,不過不一定是使用FLume,畢竟優(yōu)秀的產(chǎn)品很多滑进,比如facebook的Scribe犀忱,還有Apache新出的另一個明星項目chukwa,還有淘寶Time Tunnel扶关。
flume+kafka+storm+mysql構建大數(shù)據(jù)實時系統(tǒng)
Flume+HDFS+KafKa+Strom實現(xiàn)實時推薦阴汇,反爬蟲服務等服務在美團的應用
Flume+Hadoop+Hive的離線分析網(wǎng)站用戶瀏覽行為路徑
Flume+Logstash+Kafka+Spark Streaming進行實時日志處理分析
Flume+Spark + ELK新浪數(shù)據(jù)系統(tǒng)實時監(jiān)控平臺
列舉不完了 ……………………………………………………………………