Flume概述及快速入門

Flume定義

Flume是Cloudera提供的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統。Flume基於流式架構,靈活簡單
image.png

Flume的優點

  1. 可以和任意存儲進程集成。
  2. 輸入的的數據速率大於寫入目的存儲的速率,flume會進行緩衝,減小hdfs的壓力。
  3. flume中的事務基於channel,使用了兩個事務模型(sender + receiver),確保消息被可靠發送。
    Flume使用兩個獨立的事務分別負責從soucrce到channel,以及從channel到sink的事件傳遞。一旦事務中所有的數據全部成功提交到channel,那麼source才認爲該數據讀取完成。同理,只有成功被sink寫出去的數據,纔會從channel中移除。

Flume組成架構

Flume組成架構
Flume組成架構詳解

  1. Source數據輸入端的常見類型有:spooling directory、 exec 、syslog、 avro、netcat等。
  2. Channel是位於Source和Sink之間的緩衝區。
    Flume自帶兩種Channel:Memory Channel和File Channel。
    Memory Channel是基於內存緩存,在不需要關心數據丟失的情景下適用。
    File Channel是Flume的持久化Channel。系統宕機不會丟失數據。
  3. Sink組件常見的目的地包括HDFS、Kafka、logger、avro、File、自定義。
  4. Put事務流程
    doPut:將批數據先寫入臨時緩衝區putList
    doCommit:檢查channel內存隊列是否足夠合併。
    doRollback:channel內存隊列空間不足,回滾數據
  5. Take事務
    doTake:先將數據取到臨時緩衝區takeList
    doCommit:如果數據全部發送成功,則清除臨時緩衝區takeList
    doRollback:數據發送過程中如果出現異常,rollback將臨時緩衝區takeList中的數據歸還給channel內存隊列。

Agent

Agent是一個JVM進程,它以事件的形式將數據從源頭送至目的。
Agent主要有3個部分組成,Source、Channel、Sink

Source

Source是負責接收數據到Flume Agent的組件。Source組件可以處理各種類型、各種格式的日誌數據,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy。

Channel

Channel是位於Source和Sink之間的緩衝區。因此,Channel允許Source和Sink運作在不同的速率上。Channel是線程安全的,可以同時處理幾個Source的寫入操作和幾個Sink的讀取操作。
Flume自帶兩種Channel:Memory Channel和File Channel。
Memory Channel是內存中的隊列。Memory Channel在不需要關心數據丟失的情景下適用。如果需要關心數據丟失,那麼Memory Channel就不應該使用,因爲程序死亡、機器宕機或者重啓都會導致數據丟失。
File Channel將所有事件寫到磁盤。因此在程序關閉或機器宕機的情況下不會丟失數據。

Sink

Sink不斷地輪詢Channel中的事件且批量地移除它們,並將這些事件批量寫入到存儲或索引系統、或者被髮送到另一個Flume Agent。
Sink是完全事務性的。在從Channel批量刪除數據之前,每個Sink用Channel啓動一個事務。批量事件一旦成功寫出到存儲系統或下一個Flume Agent,Sink就利用Channel提交事務。事務一旦被提交,該Channel從自己的內部緩衝區刪除事件。
Sink組件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定義。

Event

傳輸單元,Flume數據傳輸的基本單元,以事件的形式將數據從源頭送至目的地。 Event由可選的header和載有數據的一個byte array 構成。Header是容納了key-value字符串對的HashMap。
image.png

Flume拓撲結構

Flume Agent連接
這種模式是將多個flume給順序連接起來了,從最初的source開始到最終sink傳送的目的存儲系統。此模式不建議橋接過多的flume數量, flume數量過多不僅會影響傳輸速率,而且一旦傳輸過程中某個節點flume宕機,會影響整個傳輸系統。
單source,多channel、sink
Flume支持將事件流向一個或者多個目的地。這種模式將數據源複製到多個channel中,每個channel都有相同的數據,sink可以選擇傳送的不同的目的地
 Flume負載均衡
Flume支持使用將多個sink邏輯上分到一個sink組,flume將數據發送到不同的sink,主要解決負載均衡和故障轉移問題
Flume Agent聚合
這種模式是我們最常見的,也非常實用,日常web應用通常分佈在上百個服務器,大者甚至上千個、上萬個服務器。產生的日誌,處理起來也非常麻煩。用flume的這種組合方式能很好的解決這一問題,每臺服務器部署一個flume採集日誌,傳送到一個集中收集日誌的flume,再由此flume上傳到hdfs、hive、hbase、jms等,進行日誌分析

Flume Agent內部原理

image.png

Flume安裝地址

  1. Flume官網地址
    http://flume.apache.org/
  2. 文檔查看地址
    http://flume.apache.org/FlumeUserGuide.html
  3. 下載地址
    http://archive.apache.org/dist/flume/

安裝部署

  1. 將apache-flume-1.7.0-bin.tar.gz上傳到linux的/opt/software目錄下
  2. 解壓apache-flume-1.7.0-bin.tar.gz到/opt/module/目錄下
[liujh@hadoop102 software]$ tar -zxf apache-flume-1.7.0-bin.tar.gz -C /opt/module/
  1. 修改apache-flume-1.7.0-bin的名稱爲flume
[liujh@hadoop102 module]$ mv apache-flume-1.7.0-bin flume
  1. 將flume/conf下的flume-env.sh.template文件修改爲flume-env.sh,並配置flume-env.sh文件
[liujh@hadoop102 conf]$ mv flume-env.sh.template flume-env.sh
[liujh@hadoop102 conf]$ vi flume-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144

關注微信公衆號
簡書:https://www.jianshu.com/u/0278602aea1d
CSDN:https://blog.csdn.net/u012387141

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章