Flume 入門--幾種不同的Sources

1.flume概念

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

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

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

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


2.flume中的重要模型

2.1.1.flume Event:

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

2.1.2.flume Agent:

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

2.1.3.Source

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

2.1.4.Channel

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

2.1.5.Sink

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


2.2.          flume流動模型

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

 3、發送數據

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


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