天天看點

Flume架構介紹

Flume架構介紹

  1. Flume概念

    ​ 分布式的日志收集系統,将伺服器中的資料收集起來送到指定的地方去,比如說hdfs

    Flume架構介紹
  2. Event概念

    ​ flume的核心是把資料從資料源(source)收集過來,再将收集到的資料送到指定的目的地(sink)。為了保證輸送的過程一定成功,在送到目的地(sink)之前,會先緩存資料(channel),待資料真正到達目的地(sink)後,flume再删除自己緩存的資料。

    ​ 在整個資料的傳輸的過程中,流動的是event,即事務保證是在event級别進行的。那麼什麼是event呢?—–event将傳輸的資料進行封裝,是flume傳輸資料的基本機關,如果是文本檔案,通常是一行記錄。event也是事務的基本機關。event從source,流向channel,再到sink,本身為一個位元組數組,并可攜帶headers(頭資訊)資訊。event代表着一個資料的最小完整單元,從外部資料源來,向外部的目的地去。

    Flume架構介紹
    一個event=event header +event body+event資訊
  3. Flume架構介紹

    Flume的邏輯架構:

    Flume架構介紹

    分層架構:agent,collector和storage

    flume使用兩個元件:Master和Node,Node根據在Mastershell或web中動态配置,決定是作為Agent或Collector

    1) Agent:

    運作在日志收集節點的java程序

    agent三個核心元件:source-channel-sink 生産者-倉庫-消費者

    source:用來收集資料,各種格式avro、thrift、exec、jms、spooling、directory、netcat、sequence generator、syslog、http、legacy,自定義等。

    http://www.cnblogs.com/zhangmiaochp/archive/2011/05/18/2050465.html

    channel:source元件把資料收集來以後,臨時存放在channel中,即channel元件在agent中是專門用來存放臨時資料的——對采集到的資料進行簡單的緩存,可以存放在memory、jdbc、file等等。

    Sink: sink元件是用于把資料發送到目的地的元件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、Hbase、solr、自定義。

    http://www.cnblogs.com/zhangmiaochp/archive/2011/05/18/2050472.html

    2)Collector

    collector的作用是将多個agent的資料彙總後,加載到storage它的source和sink與agent類似

    3)storage

    storage是存儲系統,可以是一個普通file,也可以是HDFS,HIVE,HBase

    4)Master

    Master是管理協調agent和collector的配置資訊,是flume叢集的控制器

    注:Flume架構對hadoop和zookeeper的依賴隻是在jar包上,并不要求flume啟動時必須将hadoop和zookeeper服務也啟動。

  4. Flume的廣義用法

    flume之是以這麼神奇—-其原因也在于flume可以支援多級flume的agent,即flume可以前後相繼,例如sink可以将資料寫到下一個agent的source中,這樣的話就可以連成串了,可以整體處理了。flume還支援扇入(fan-in)、扇出(fan-out)。所謂扇入就是source可以接受多個輸入,所謂扇出就是sink可以将資料輸出多個目的地destination中。

  5. Flume應用-日志采集

    flume提供了大量内置的Source、Channel和Sink類型。而且不同類型的Source、Channel和Sink可以自由組合—–組合方式基于使用者設定的配置檔案,非常靈活。比如:Channel可以把事件暫存在記憶體裡,也可以持久化到本地硬碟上。Sink可以把日志寫入HDFS, HBase,甚至是另外一個Source等等。

    flume使用方法:書寫一個配置檔案,在配置檔案當中描述source、channel與sink的具體實作,而後運作一個agent執行個體,在運作agent執行個體的過程中會讀取配置檔案的内容,這樣flume就會采集到資料

    配置檔案編寫原則:

    1. 整體上描述代理agent中sources、sinks、channels所涉及到的元件

      a1.sources = r1

      a1.sinks = k1

      a1.channels = c1

    2. 較長的描述agent中每一個source、sink與channel的具體實作

      describe/configure the source

      a1.sources.r1.type = netcat

      a1.sources.r1.bind = localhost

      a1.sources.r1.port = 44444

      #describe the sinl

      a1.sinks.k1.type = logger

      #use a channel with buffers events inmemory

      a1.resources.c1.type = memory

      a1.channels.c1.capacity = 1000

      a1.channels.c1.transactionCapacity = 100

    3. 通過channel将source和sink連接配接起來

      a1.sources.r1.channels = c1

      a1.sinks.k1.channel = c1

    4. 啟動agent的shell操作

      flume-ng agent –n a1 –c ../conf –f../conf/example.file-Dflume.root.logger=DEBUG,console

      -n :指定agent的名稱

      -c:指定flume中配置檔案的目錄

      -f:指定配置檔案

      -Dflume.root.logger=DEBUG,console

      設定日志登記

  6. 設計目标

    (1) 可靠性:當節點出現故障時,日志能夠被傳送到其他節點上而不會丢失。Flume提供了三種級别的可靠性保障,從強到弱依次分别為:end-to-end(收到資料agent首先将event寫到磁盤上,當資料傳送成功後,再删除;如果資料發送失敗,可以重新發送。),Store on failure(這也是scribe采用的政策,當資料接收方crash時,将資料寫到本地,待恢複後,繼續發送),Best effort(資料發送到接收方後,不會進行确認)

    (2) 可擴充性

    Flume采用了三層架構,分别為agent,collector和storage,每一層均可以水準擴充。其中,所有agent和collector由master統一管理,這使得系統容易監控和維護,且master允許有多個(使用ZooKeeper進行管理和負載均衡),這就避免了單點故障問題。

    (3) 可管理性

    所有agent和colletor由master統一管理,這使得系統便于維護。多master情況,Flume利用ZooKeeper和gossip,保證動态配置資料的一緻性。使用者可以在master上檢視各個資料源或者資料流執行情況,且可以對各個資料源配置和動态加載。Flume提供了web 和shell script command兩種形式對資料流進行管理。