Flume 入門--幾種不一樣的Sources

1.flume概念

flume是分佈式的,可靠的,高可用的,用於對不一樣來源的大量的日誌數據進行有效收集、彙集和移動,並以集中式的數據存儲的系統。java

flume目前是apache的一個頂級項目。apache

flume須要java運行環境,要求java1.6以上,推薦java1.7.windows

將下載好的flume安裝包解壓到指定目錄便可。bash


2.flume中的重要模型

2.1.1.flume Event:

flume 事件,被定義爲一個具備有效荷載的字節數據流和可選的字符串屬性集。curl

2.1.2.flume Agent:

flume 代理,是一個進程承載從外部源事件流到下一個目的地的過程。包含source channel 和 sink。分佈式

2.1.3.Source

數據源,消耗外部傳遞給他的事件,外部源將數據按照flume Source 能識別的格式將Flume 事件發送給flume Source。ide

2.1.4.Channel

數據通道,是一個被動的存儲,用來保持事件,直到由一個flume Sink消耗。工具

2.1.5.Sink

數據匯聚點,表明外部數據存放位置。發送flume event到指定的外部目標。加密


2.2.          flume流動模型url

2.3.          flume的特色

2.3.1.  複雜流動性

Flume容許用戶進行多級流動到最終目的地,也容許扇出流(一到多)、扇入流(多到一)的、故障轉移和失敗處理。

2.3.2.  可靠性

事務性的數據傳遞,保證了數據的可靠性。

2.3.3.  可恢復性

通道能夠之內存或文件的方式實現,內存更快,可是不可恢復,而文件雖然比較慢但提供了可恢復性。

     入門案例

 

1.首先編寫一個配置文件:

#example.conf:單節點Flume配置
    #命名Agent a1的組件
    a1.sources  =  r1
    a1.sinks  =  k1
    a1.channels  =  c1
 
    #描述/配置Source
    a1.sources.r1.type  =  netcat
    a1.sources.r1.bind  =  0.0.0.0
    a1.sources.r1.port  =  44444
 
    #描述Sink
    a1.sinks.k1.type  =  logger
 
    #描述內存Channel
    a1.channels.c1.type  =  memory
    a1.channels.c1.capacity  =  1000
    a1.channels.c1.transactionCapacity  =  100
 
    #爲Channle綁定Source和Sink
    a1.sources.r1.channels  =  c1
    a1.sinks.k1.channel  =  c1

2.經過flume的工具啓動agent

1 $ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console

 三、發送數據

windows中經過telnet命令鏈接flume所在機器的44444端口發送數據。


4.     Source詳解

如今介紹幾種比較重要的Source


4.1.    Avro Source


監聽AVRO端口來接受來自外部AVRO客戶端的事件流。利用Avro Source能夠實現多級流動、扇出流、扇入流等效果。另外也能夠接受經過flume提供的Avro客戶端發送的日誌信息。


4.1.1.   Avro Source屬性說明

!channels    

!type     類型名稱,"AVRO"

!bind     須要監聽的主機名或IP

!port     要監聽的端口

threads       工做線程最大線程數

selector.type     

selector.*     

interceptors     空格分隔的攔截器列表

interceptors.*        

compression-type  none   壓縮類型,能夠是「none」或「default」,這個值必須和AvroSource的壓縮格式匹配

sslfalse  是否啓用ssl加密,若是啓用還須要配置一個「keystore」和一個「keystore-password」。

keystore      SSL提供的java密鑰文件所在路徑。

keystore-password   SSL提供的java密鑰文件 密碼。

keystore-typeJKS密鑰庫類型能夠是「JKS」或「PKCS12」。

exclude-protocolsSSLv3  空格分隔開的列表,用來指定在SSL / TLS協議中排除。SSLv3將老是被排除除了所指定的協議。

ipFilter   false  若是須要爲netty開啓ip過濾,將此項設置爲true

ipFilterRules   定義nettyip過濾設置表達式規則

 

案例:

編寫配置文件  修改上面給出的配置文件,除了Source部分配置不一樣,其他部分都同樣。不一樣的地方以下:

#描述/配置Source
    a1.sources.r1.type  =  avro
    a1.sources.r1.bind  =  0.0.0.0
    a1.sources.r1.port  =  44444

啓動flume

    ./flume-ng agent --conf ../conf --conf-file ../conf/template2.conf --name a1 -Dflume.root.logger=INFO,console

 經過flume提供的avro客戶端向指定機器指定端口發送日誌信息:

    ./flume-ng avro-client --conf ../conf --host 0.0.0.0 --port 44444 --filename ../mydata/log1.txt

會發現確實收集到日誌



4.2.    Spooling Directory Source


這個Source容許你將將要收集的數據放置到"自動蒐集"目錄中。這個Source將監視該目錄,並將解析新文件的出現。事件處理邏輯是可插拔的,當一個文件被徹底讀入通道,它會被重命名或可選的直接刪除。

要注意的是,放置到自動蒐集目錄下的文件不能修改,若是修改,則flume會報錯。另外,也不能產生重名的文件,若是有重名的文件被放置進來,則flume會報錯。

屬性說明:(因爲比較長 這裏只給出了必須給出的屬性,所有屬性請參考官方文檔):


!channels    

!type     類型,須要指定爲"spooldir"

!spoolDir     讀取文件的路徑,即"蒐集目錄"

fileSuffix.COMPLETED對處理完成的文件追加的後綴

案例:

編寫配置文件  修改上面給出的配置文件,除了Source部分配置不一樣,其他部分都同樣。不一樣的地方以下:

123 #描述/配置Sourcea1.sources.r1.type  = spooldira1.sources.r1.spoolDir=/home/park/work/apache-flume-1.6.0-bin/mydata

 啓動flume

    ./flume-ng agent --conf ../conf --conf-file ../conf/template4.conf --name a1 -Dflume.root.logger=INFO,console

 向指定目錄中傳輸文件,發現flume收集到了該文件,將文件中的每一行都做爲日誌來處理



4.3.    NetCat Source


一個NetCat Source用來監聽一個指定端口,並將接收到的數據的每一行轉換爲一個事件。


4.3.1.   NetCat Source屬性說明

channels  

type   類型名稱,須要被設置爲"netcat"

bind   指定要綁定到的ip或主機名。

port   指定要綁定到的端口號

max-line-length   512單行最大字節數



案例:上面完整的例子便是



4.4.    HTTP Source


HTTP Source接受HTTPGETPOST請求做爲Flume的事件,其中GET方式應該只用於試驗。

Source須要提供一個可插拔的"處理器"來將請求轉換爲事件對象,這個處理器必須實現HTTPSourceHandler接口,該處理器接受一個 HttpServletRequest對象,並返回一個Flume Envent對象集合。

從一個HTTP請求中獲得的事件將在一個事務中提交到通道中。所以容許像文件通道那樣對通道提升效率。

若是處理器拋出一個異常,Source將會返回一個400HTTP狀態碼。

若是通道已滿,沒法再將Event加入Channel,則Source返回503HTTP狀態碼,表示暫時不可用。



4.4.1.   HTTP Source屬性說明

type    類型,必須爲"HTTP"

port   監聽的端口

bind   0.0.0.0    監聽的主機名或ip

handler      org.apache.flume.source.http.JSONHandler處理器類,須要實現HTTPSourceHandler接口

handler.*     處理器的配置參數

selector.type

selector.*   

interceptors    

interceptors.*        

enableSSL  false  是否開啓SSL,若是須要設置爲true。注意,HTTP不支持SSLv3

excludeProtocols  SSLv3  空格分隔的要排除的SSL/TLS協議。SSLv3老是被排除的。

keystore      密鑰庫文件所在位置。

keystorePassword Keystore 密鑰庫密碼

案例:

編寫配置文件  修改上面給出的配置文件,除了Source部分配置不一樣,其他部分都同樣。不一樣的地方以下:

#描述/配置Source
    a1.sources.r1.type  = http
    a1.sources.r1.port  = 66666

啓動flume:

    ./flume-ng agent --conf ../conf --conf-file ../conf/template6.conf --name a1 -Dflume.root.logger=INFO,console

 經過命令發送HTTP請求到指定端口:

    curl -X POST -d '[{ "headers" :{"a" : "a1","b" : "b1"},"body" : "hello~http~flume~"}]' http://0.0.0.0:6666

相關文章
相關標籤/搜索