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。
三. 安裝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介紹及其安裝