第 1 章 概述
1.1 Flume 定義
Flume 是 Cloudera 提供的一個高可用的,高可靠的,分佈式的海量日誌採集、
聚合和傳 輸的系統。Flume 基於流式架構,靈活簡單。
![](http://static.javashuo.com/static/loading.gif)
1.2 Flume 組成架構
Flume 組成架構如圖 1-1,圖 1-2 所示:
![](http://static.javashuo.com/static/loading.gif)
圖 1-1 Flume 組成架構
![](http://static.javashuo.com/static/loading.gif)
圖 1-2 Flume 組成架構詳解
下面咱們來詳細介紹一下 Flume 架構中的組件。
1.2.1 Agent
Agent 是一個 JVM 進程,它以事件的形式將數據從源頭送至目的,是 Flume 數據傳輸 的基本單元。 Agent 主要有 3 個部分組成,Source、Channel、Sink。
1.2.2 Source
Source 是負責接收數據到 Flume Agent 的組件。Source 組件能夠處理各類類型、各類格 式的日誌數據,包括 avro、thrift、exec、jms、spooling directory、netcat、sequence generator、 syslog、http、legacy。
1.2.3 Channel
Channel 是位於 Source 和 Sink 之間的緩衝區。所以,Channel 容許 Source 和 Sink 運做 在不一樣的速率上。Channel 是線程安全的,能夠同時處理幾個 Source 的寫入操做和幾個 Sink 的讀取操做。
Flume 自帶兩種 Channel:Memory Channel 和 File Channel。
Memory Channel 是內存中的隊列。Memory Channel 在不須要關心數據丟失的情景下適 用。若是須要關心數據丟失,那麼 Memory Channel 就不該該使用,由於程序死亡、機器宕 機或者重啓都會致使數據丟失。
File Channel 將全部事件寫到磁盤。所以在程序關閉或機器宕機的狀況下不會丟失數據。
1.2.4 Sink
Sink 不斷地輪詢 Channel 中的事件且批量地移除它們,並將這些事件批量寫入到存儲或
索引系統、或者被髮送到另外一個 Flume Agent。
Sink 是徹底事務性的。在從 Channel 批量刪除數據以前,每一個 Sink 用 Channel 啓動一
個事務。批量事件一旦成功寫出到存儲系統或下一個 Flume Agent,Sink 就利用 Channel 提
交事務。事務一旦被提交,該 Channel 從本身的內部緩衝區刪除事件。
Sink 組件目的地包括 hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定義。
1.2.5 Event
傳輸單元,Flume 數據傳輸的基本單元,以事件的形式將數據從源頭送至目的地。
1.3 Flume 拓撲結構
Flume 的拓撲結構如圖 1-三、1-四、1-5 和 1-6 所示:
![](http://static.javashuo.com/static/loading.gif)
圖 1-4 單 source,多 channel、sink
![](http://static.javashuo.com/static/loading.gif)
圖 1-5 Flume 負載均衡
![](http://static.javashuo.com/static/loading.gif)
圖 1-6 Flume Agent 聚合
1.4 Flume Agent 內部原理
![](http://static.javashuo.com/static/loading.gif)
第 2 章 部署
2.1 Flume 安裝地址
1) Flume 官網地址
http://flume.apache.org/
2)文檔查看地址
http://flume.apache.org/FlumeUserGuide.html
3)下載地址
http://archive.apache.org/dist/flume/
2.2 安裝部署
1)將 apache-flume-1.7.0-bin.tar.gz 上傳到 linux 的/opt/software 目錄下
2)解壓 apache-flume-1.7.0-bin.tar.gz 到/opt/module/目錄下
[atguigu@hadoop102 software]$ tar -zxf apache-flume-1.7.0-bin.tar.gz -C /opt/module/
3)修改 apache-flume-1.7.0-bin 的名稱爲 flume
[atguigu@hadoop102 module]$ mv apache-flume-1.7.0-bin flume
4) 將 flume/conf 下 的 flume-env.sh.template 文 件 修 改 爲 flume-env.sh , 並 配 置
flume-env.sh 文件
[atguigu@hadoop102 conf]$ mv flume-env.sh.template flume-env.sh
[atguigu@hadoop102 conf]$ vi flume-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)