1. 程式人生 > >Flume介紹及其安裝

Flume介紹及其安裝

日誌收集 Flume Flume簡介 Flume配置文件 Flume安裝

一. Flume是什麽?

Flume是一個分布式,可靠的系統。它能夠高效的收集,整合數據,還可以將來自不同源的大量數據移動到數據中心存儲。

Flume是Apache下的一個頂級項目。Flume不僅可以收集整合日誌數據,因為數據源是可以自定義的,Flume能夠用於傳輸大量日誌數據,這些數據包含到不僅限於網絡傳輸數據、社交媒體生成的數據、郵件信息等等。

當前的版本有0.9.x和1.x。新版本具有更加靈活的配置和性能上的改進,推薦使用1.x版本。本文介紹使用的是1.8版本。

二.Flume的數據流模型

技術分享圖片

簡單的講,Flume Agent(一個JVM進程)將外部產生的事件發送給下一個目標也稱成下一跳。

1.相關術語

  • Flume event:它是實際就是數據。是Flume中數據最小傳輸單位,數據裏面除了有效數據,還有一些可選的屬性設置。
  • Flume Source:會將收到的event放在一個或多個channel中
  • Flume Channe:保存event知道event被一個Flume sink消費
  • Flume Sink:會將channel中的event放入到一個外部源中,或者將其發送給下一個Flume agent的Flume source中。
    註意 : Flume source和sink與channel的交互式異步的。

2.Flume數據流向過程

如上圖,外部事件源Web Server 將組織成具體格式的數據發送給Flume source。Flume source有多種,以Avro Flume Source為例,Avro Flume Source會收到來自Avro client或者Flume agent發來的數據(是由Flume sink從Channel中獲取的數據)。Flume Source將數據放入Channel中。Flume Sink可將event發送給HDFS,不過此處的Sink要使用HDFS Sink。

註意: Source、Channel、Sink都有不同的實現,對應著不同的功能。

三. 安裝Flume

1. 下載安裝包

~]# wget http://archive.apache.org/dist/flume/stable/apache-flume-1.8.0-bin.tar.gz
~]# tar xf apache-flume-1.8.0-bin.tar.gz -C /opt
~]# cd /opt
~]# ln -sv apache-flume-1.8.0-bin.tar.gz apache-flume

2. 安裝jdk

因為flume java程序,所以依賴jdk
jdk的版本要求為1.8.0+
~]# yum install -y java-1.8.0-openjdk

3. 配置文件

修改配置文件conf/flume-conf.properties.template

(1)單個組件配置

~]# vim conf/flume-conf.properties.template


#對這個flume agent取一個名字,稱之為agent01。這個名字可以任意取
agent01.sources = r1     # 在flume agent中source的名字為r1。這個名字可以任意取
agent01.sinks = k1         # 在flume sinks中sinks的名字為k1。這個名字可以任意取
agent01.channels = c1   # 在flume agent中channels的名字為c1。這個名字可以任意取

#設置flume source參數
agent01.sources.r1.type = netcat           #agent01這個flume agent中源r1的類型為netcat,監聽在指定的ip+port以接受數據
agent01.sources.r1.bind = localhost       #指明綁定的端口
agent01.sources.r1.port = 44444           #指明監聽的端口

#設置flume sink
agent01.sinks.k1.type = logger    #會記錄info級別的信息,主要用於調試

#配置flume channel
agent01.channels.c1.type = memory   #使用memory類型的channel,他會將event保存在內存中
agent01.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

#指定source和sink綁定的channel
agent01.sources.r1.channels = c1   #r1會將event發給c1 channel
agent01.sinks.k1.channel = c1         #k1會從c1中消費event

(2)多flow agent配置

一個flume agent可以配置多個flow,我們可以有多個sources,channel,sink。這些組件的組合可以形成多個數據流(data flow)。

使用場景:可以同時配置多個flow,這兩個流相互幹擾。以下面為例,
一條流為 : avro-AppSrv-source1-->mem-channel-1--> mem-channel-1
另一條為 : exec-tail-source2--> file-channel-2 --> file-channel-2

#list the sources, sinks and channels in the agent
agent_foo.sources = avro-AppSrv-source1 exec-tail-source2
agent_foo.sinks = hdfs-Cluster1-sink1 avro-forward-sink2
agent_foo.channels = mem-channel-1 file-channel-2

#flow #1 configuration
agent_foo.sources.avro-AppSrv-source1.channels = mem-channel-1
agent_foo.sinks.hdfs-Cluster1-sink1.channel = mem-channel-1

#flow #2 configuration
agent_foo.sources.exec-tail-source2.channels = file-channel-2
agent_foo.sinks. file-channel-2.channel = file-channel-2

(3)Fan out flow

支持將一個source中的數據發往多個channel中,Fan out 有兩種模式

  • replicating : 事件會發往多個channel
  • multiplexing : 事件會發往經由selector過濾符合要求的channel,如果不指明默認是replicating
    配置示例:
#list the sources, sinks and channels in the agent
agent_foo.sources = avro-AppSrv-source1
agent_foo.sinks = hdfs-Cluster1-sink1 avro-forward-sink2
agent_foo.channels = mem-channel-1 file-channel-2

#set channels for source
agent_foo.sources.avro-AppSrv-source1.channels = mem-channel-1 file-channel-2

#set channel for sinks
agent_foo.sinks.hdfs-Cluster1-sink1.channel = mem-channel-1
agent_foo.sinks.avro-forward-sink2.channel = file-channel-2

#channel selector configuration
agent_foo.sources.avro-AppSrv-source1.selector.type = multiplexing
agent_foo.sources.avro-AppSrv-source1.selector.header = State
agent_foo.sources.avro-AppSrv-source1.selector.mapping.CA = mem-channel-1
agent_foo.sources.avro-AppSrv-source1.selector.mapping.AZ = file-channel-2
agent_foo.sources.avro-AppSrv-source1.selector.mapping.NY = mem-channel-1 file-channel-2
agent_foo.sources.avro-AppSrv-source1.selector.default = mem-channel-1

selector.header指定檢測的頭部的名稱,上面配置為State。如果值是“CA”event將會發往mem-channel-1,如果值是“AZ”event將會發往file-channel-2,如果是“NY”將會發往 mem-channel-1和file-channel-2。如果都沒有匹配到,則會發往默認channel mem-channel-1
需要註意:一旦指定的channel不能消費事件,selector會在所有的channel中重試。

4. 啟動flume agent

單個組件配置方式啟動flume agent
apache-fluem]# bin/flume-ng agent --conf ./conf --conf-file ./conf/flume-conf.properties.template --name agent01

agent:表明運行為flume agent
--conf :指明配置文件目錄
--conf-file:指明配置我文件
--name:指明運行agent的名稱

技術分享圖片
可以看到端口已經監聽

5. 測試是否正常

連接成功後,輸入任意的字符串,如果正常會返回OK
技術分享圖片

參考

對於不同source,channel以及sink的使用可以參考官方文檔
Flume官網文檔:http://flume.apache.org/FlumeUserGuide.html

Flume介紹及其安裝