flume

syc0616發表於2020-10-09

Flume概述

Flume是Cloudera提供的一個高可用的,高可靠的,分散式的海量日誌採集、聚合和傳輸的系統。Flume基於流式架構,靈活簡單。

版本區別
        0.9之前稱為flume og
        0.9之後為flume ng
        
        目前都使用flume ng!
        
        1.7之前,沒有taildirsource,1.7及之後有taildirsource

使用Flume
        啟動agent:    flume-ng  agent  -n agent的名稱  -f agent配置檔案  -c 其他配置檔案所在的目錄 -Dproperty=value

Flume基礎架構

圖1-1 Flume組成架構

1 Agent

Agent是一個JVM程式,它以事件的形式將資料從源頭送至目的。

Agent主要有3個部分組成,SourceChannelSink

1.Source(資料來源)

Source是負責接收資料到Flume Agent的元件。Source元件可以處理各種型別、各種格式的日誌資料,包括avro、thrift、exec、jms、spooling directorynetcat、sequence generator、syslog、http、legacy。

2.Sink(落地)

Sink不斷地輪詢Channel中的事件且批量地移除它們,並將這些事件批量寫入到儲存或索引系統、或者被髮送到另一個Flume Agent。

Sink元件目的地包括hdfsloggeravro、thrift、ipc、fileHBase、solr、自定義。

3.Channel

Channel是位於Source和Sink之間的緩衝區。因此,Channel允許Source和Sink運作在不同的速率上。Channel是執行緒安全的,可以同時處理幾個Source的寫入操作和幾個Sink的讀取操作。

Flume自帶兩種Channel:Memory ChannelFile Channel

Memory Channel是記憶體中的佇列。Memory Channel在不需要關心資料丟失的情景下適用。如果需要關心資料丟失,那麼Memory Channel就不應該使用,因為程式死亡、機器當機或者重啟都會導致資料丟失。

File Channel將所有事件寫到磁碟。因此在程式關閉或機器當機的情況下不會丟失資料。

 

Event

傳輸單元,Flume資料傳輸的基本單元,以Event的形式將資料從源頭送至目的地。Event由HeaderBody兩部分組成,Header用來存放該event的一些屬性,為K-V結構,Body用來存放該條資料,形式為位元組陣列。

Interceptors

在source將event放入到channel之前,呼叫攔截器對event進行攔截和處理!      

在Flume中允許使用攔截器對傳輸中的event進行攔截和處理!攔截器必須實現org.apache.flume.interceptor.Interceptor介面。攔截器可以根據開發者的設定修改甚至刪除event!Flume同時支援攔截器鏈,即由多個攔截器組合而成!通過指定攔截器鏈中攔截器的順序,event將按照順序依次被攔截器進行處理!

Channel Selectors

當一個source對接多個channel時,由 Channel Selectors選取channel將event存入!      

Channel Selectors用於source元件將event傳輸給多個channel的場景。常用的有replicating(預設)和multiplexing兩種型別。replicating負責將event複製到多個channel,而multiplexing則根據event的屬性和配置的引數進行匹配,匹配成功則傳送到指定的channel!

Sink Processors

 當多個sink從一個channel取資料時,為了保證資料的順序,由sink processor從多個sink中挑選一個sink,由這個sink幹活!      

使用者可以將多個sink組成一個整體(sink組),Sink Processors可用於提供組內的所有sink的負載平衡功能,或在時間故障的情況下實現從一個sink到另一個sink的故障轉移。

 

如何編寫agent的配置檔案
        agent的配置檔案的本質是一個Properties檔案!格式為 屬性名=屬性值
        
        在配置檔案中需要編寫:
        ①定義當前配置檔案中agent的名稱,再定義source,sink,channel它們的別名
        ②指定source和channel和sink等元件的型別
        ③指定source和channel和sink等元件的配置,配置引數名和值都需要參考flume到官方使用者手冊
        ④指定source和channel的對應關係,以及sink和channel的對應關係連線元件

監控埠資料官方案例

使用Flume監聽一個埠,收集該埠資料,並列印到控制檯。

實現步驟:

1.安裝netcat工具

sudo yum install -y nc

2.判斷44444埠是否被佔用

sudo netstat -tunlp | grep 44444

3.建立Flume Agent配置檔案flume-netcat-logger.conf

檢視flume官方文件:

使用的元件型別
①netcat source:  作用就是監聽某個tcp埠手動的資料,將每行資料封裝為一個event。
        工作原理類似於nc -l 埠
配置:
    必須屬性:
    type    –    The component type name, needs to be netcat
    bind    –    Host name or IP address to bind to
    port    –    Port # to bind to
    
②logger sink: 作用使用logger(日誌輸出器)將event輸出到檔案或控制檯,使用info級別記錄event!
    必須屬性:
    type    –    The component type name, needs to be logger
    可選屬性:
maxBytesToLog    16    Maximum number of bytes of the Event body to log

③memery channel
    必須屬性:
    type    –    The component type name, needs to be memory
    可選屬性:
    capacity    100    The maximum number of events stored in the channel
    transactionCapacity    100    The maximum number of events the channel will take from a source or give to a sink per transaction

 

在job資料夾下建立Flume Agent配置檔案flume-netcat-logger.conf。

vim flume-netcat-logger.conf

 

在flume-netcat-logger.conf檔案中新增如下內容。

# Name the components on this agent

#r1:表示a1的SOURCE的名稱

a1.sources = r1 

#k1:表示a1的Sink的名稱    

a1.sinks = k1

#c1:表示a1的Channel的名稱

a1.channels = c1

# Describe/configure the source

#表示a1的輸入源型別為netcat埠型別

a1.sources.r1.type = netcat

#表示a1的輸入源的監聽的主機

a1.sources.r1.bind = kylin3

#表示a1的輸入源的監聽的埠號

a1.sources.r1.port = 44444

# Describe the sink

#標識a1的輸出目的地事控制檯logger型別

a1.sinks.k1.type = logger

# Use a channel which buffers events in memory

#表示a1的channel型別是memory

a1.channels.c1.type = memory

#表示a1的channel總容量10000個

a1.channels.c1.capacity = 10000

#表示a1的channel傳輸時收集到1000條event以後再去提交事務

a1.channels.c1.transactionCapacity = 1000

# Bind the source and sink to the channel

#表示r1和c1連線起來

a1.sources.r1.channels = c1

#表示c1和k1連線起來

a1.sinks.k1.channel = c1

 

注:配置檔案來源於官方手冊http://flume.apache.org/FlumeUserGuide.html

先開啟flume監聽埠

第一種寫法:

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

第二種寫法:

bin/flume-ng agent -c conf/ -n a1 –f job/flume-netcat-logger.conf -Dflume.root.logger=INFO,console

引數說明:

       --conf/-c:表示配置檔案儲存在conf/目錄

       --name/-n:表示給agent起名為a1

       --conf-file/-f:flume本次啟動讀取的配置檔案是在job資料夾下的flume-telnet.conf檔案。

       -Dflume.root.logger=INFO,console :-D表示flume執行時動態修改flume.root.logger引數屬性值,並將控制檯日誌列印級別設定為INFO級別。日誌級別包括:log、info、warn、error。

使用netcat工具向本機的44444埠傳送內容

nc kylin3 44444

hello

 

在Flume監聽頁面觀察接收資料情況

 

 

 

 

 

 

 

 

相關文章