1. 程式人生 > >Apache Flume 1.6.0 使用者指南

Apache Flume 1.6.0 使用者指南

$ telnet localhost 44444
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
Hello world! <ENTER>
OK

在原來的flume的終端上將會輸出這個event的log資訊:

12/06/19 15:32:19 INFO source.NetcatSource: Source starting
12/06/19 15:32:19 INFO source.NetcatSource: Created serverSocket:sun.nio
.ch.ServerSocketChannelImpl[/127.0.0.1:44444] 12/06/19 15:32:34 INFO sink.LoggerSink: Event: { headers:{} body: 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0D Hello world!. }

祝賀,你已經成功地配置並部署了一個Flume agent,在接下來的部分會更加詳細地介紹agent的配置資訊。

基於Zookeeper的配置

Flume支援通過zookeeper配置agent,但這是一個實驗性特性,配置檔案需要上傳到zookeeper上去,在一個可配置的字首下面,這個配置檔案被儲存在zookeeper的節點資料中,下面是zookeeper的節點樹,比如 agent a1和a2.

- /flume
 |- /a1 [Agent config file]
 |- /a2 [Agent config file]

配置檔案上傳到zookeeper之後,agent的啟動命令如下:

$ bin/flume-ng agent –conf conf -z zkhost:2181,zkhost1:2181 -p /flume –name a1 -Dflume.root.logger=INFO,console

引數解釋如下:

引數名 預設值 描述
z - zookeeper的連線字串,hostname:port列表用逗號分隔
p /flume zookeeper中儲存agent配置檔案的根路徑

安裝第三方外掛

Flume有一個完整的基於外掛的架構。Flume自帶了很多開箱即用的source,sink,channel,serializer,並且在發Flume之外存在很多第三方的實現。
當然你也可以自定義很多元件,只要將它們的jar包放在flume-env.sh檔案中的FLUME_CLASSPATH的變數中就可以。Flume現在支援一個特殊的目錄叫plugins.d,其中按照一定格式打包的外掛能夠被自動檢測到,這樣使得外掛的打包管理很方便,而且也使除錯和問題跟蹤變得簡單了,尤其是依賴包的衝突問題。

plugins.d目錄

plugins.d目錄的位置是$FLUME_HOME/plugins.d. 在啟動的時候,flume-ng的啟動指令碼會檢查plugins.d目錄下符合以下格式的外掛,把它們包含到java啟動時合適的路徑上。

外掛的目錄佈局

plugins.d目錄下面的每一個外掛(子目錄)可以有三個子目錄:

  1. lib - 存放外掛的jar包。
  2. libext - 外掛依賴的jar包。
  3. native - 存放任何的本地依賴包,如.so檔案。

下面有兩個儲存在目錄plugins.d裡的外掛的例子:

plugins.d/
plugins.d/custom-source-1/
plugins.d/custom-source-1/lib/my-source.jar
plugins.d/custom-source-1/libext/spring-core-2.5.6.jar
plugins.d/custom-source-2/
plugins.d/custom-source-2/lib/custom.jar
plugins.d/custom-source-2/native/gettext.so

資料的採集

Flume支援很多種從外部source中採集資料的方式。

RPC

在flume的釋出版本中包含了一個Avro的客戶端,它能通過avro RPC方式傳送一個指定的檔案到Flume Avro source中:

把上面的配置檔案

a1.sources.r1.type = netcat  改成 a1.sources.r1.type = avro
bin/flume-ng avro-client -H localhost -p 41414 -F /usr/logs/log.10

上面的命令將會發送檔案/usr/logs/log.10的內容到監聽在埠上的Flume source。

執行命令

有一個exec source,它可以執行一個給定的命令,然後消費這個輸出,輸出是個單行文字,文字以\r或者\n或者\r\n結尾。

注:Flume不支援tail命令的source,有一個可以使用exec source執行的tail命令,同樣可以流式的輸出檔案。

網路流

Flume支援以下幾種方式從常見的日誌流中讀取資料:

  1. Avro
  2. Thrift
  3. Syslog
  4. Netcat

配置多個agent的資料流


圖片來自官網


為了能使資料流跨越多個agent或者跳,前一個agent的sink和當前一跳的source需要同樣是avro型別的,並且sink需要指定source的hostname(或者ip地址)和埠號。

資料流合併

在做日誌收集的時候一個常見的場景就是,大量的生產日誌的客戶端傳送資料到少量的附屬於儲存子系統的消費者agent。例如,從數百個web伺服器中收集日誌,它們傳送資料到十幾個負責將資料寫入HDFS叢集的agent。


圖片來自官網


這個可在Flume中可以實現,需要配置大量第一層的agent,每一個agent都有一個avro sink,讓它們都指向同一個agent的avro source(強調一下,在這樣一個場景下你也可以使用thrift source/sink/client)。在第二層agent上的source將收到的event合併到一個channel中,event被一個sink消費到它的最終的目的地。

資料流複用

Flume支援多路輸出event流到一個或多個目的地。這是靠定義一個多路資料流實現的,它可以實現複製和選擇性路由一個event到一個或者多個channel。


圖片來自官網


上面的例子展示了agent foo中source扇出資料流到三個不同的channel,這個扇出可以是複製或者多路輸出。在複製資料流的情況下,每一個event被髮送所有的三個channel;在多路輸出的情況下,一個event被髮送到一部分可用的channel中,它們是根據event的屬性和預先配置的值選擇channel的,例如一個event的txnType屬性的值是customer,這個它應該被髮送到channel1和channel3,如果值是vendor,它應該被髮送到channel2,如果沒有到達channel2則會被髮送到channel3. 這些對映關係應該被填寫在agent的配置檔案中。

配置

在上面幾部分中都有提到,Flume agent的配置是從一個檔案中讀取的,該檔案是一個具有層次結構的java properties檔案。

資料流的定義

為了定義單個agent內部的資料流,你需要通過channel將source和sink連線起來。你需要列出給定agent的source,sink和channel,然後將source和sink指向一個channel。一個source例項可以指定多個channel,但是一個sink只能指定一個channel。相關配置格式如下:

# list the sources, sinks and channels for the agent
<Agent>.sources = <Source>
<Agent>.sinks = <Sink>
<Agent>.channels = <Channel1> <Channel2>

# set channel for source
<Agent>.sources.<Source>.channels = <Channel1> <Channel2> ...

# set channel for sink
<Agent>.sinks.<Sink>.channel = <Channel1>

例如,一個名為agent_foo,從一個外部的avro客戶端讀取資料,然後通過一個記憶體channel將資料傳送到HDFS系統中。配置檔案weblog.config看起來是下面這樣的:

# list the sources, sinks and channels for the agent
agent_foo.sources = avro-appserver-src-1
agent_foo.sinks = hdfs-sink-1
agent_foo.channels = mem-channel-1

# set channel for source
agent_foo.sources.avro-appserver-src-1.channels = mem-channel-1

# set channel for sink
agent_foo.sinks.hdfs-sink-1.channel = mem-channel-1

這樣的配置會使event通過 mem-channel-1 從source avro-appserver-src-1 中流向sink hdfs-sink-1。當一個agent使用weblog.config作為它的配置檔案啟動時,它將例項化那個資料流。

單個元件的配置

定義過了資料流之後,你需要設定每一個元件(source、sink、channel)的屬性。在properties檔案中為每個元件的type指定值,都在同一個有層次的名稱空間下完成的:

# properties for sources
<Agent>.sources.<Source>.<someProperty> = <someValue>

# properties for channels
<Agent>.channel.<Channel>.<someProperty> = <someValue>

# properties for sinks
<Agent>.sources.<Sink>.<someProperty> = <someValue>

每一個元件都需要設定type屬性,這樣Flume才能理解需要什麼型別的物件。每個source、sink和channel都有屬於自己的一組屬性,來實現它們預期的功能。所有這些屬性都是按需設定的,在前一個例子中,我們有一個數據流是通過記憶體channel mem-channel-1 從 avro-AppSrv-source 到 hdfs-Cluster1-sink,下面是一個展示其中每一個元件的配置的例子:

agent_foo.sources = avro-AppSrv-source
agent_foo.sinks = hdfs-Cluster1-sink
agent_foo.channels = mem-channel-1

# set channel for sources, sinks
agent_foo.sources.avro-AppSrv-source.channels = mem-channel-1
agent_foo.sinks.hdfs-Cluster1-sink.channel = mem-channel-1
# properties of avro-AppSrv-source
agent_foo.sources.avro-AppSrv-source.type = avro
agent_foo.sources.avro-AppSrv-source.bind = localhost
agent_foo.sources.avro-AppSrv-source.port = 10000

# properties of mem-channel-1
agent_foo.channels.mem-channel-1.type = memory
agent_foo.channels.mem-channel-1.capacity = 1000
agent_foo.channels.mem-channel-1.transactionCapacity = 100

# properties of hdfs-Cluster1-sink
agent_foo.sinks.hdfs-Cluster1-sink.type = hdfs
agent_foo.sinks.hdfs-Cluster1-sink.hdfs.path = hdfs://namenode/flume/webdata

#...

這樣通過./flume-ng avro-client -H localhost -p 10000 -F /usr/ha.xml就可以把ha.xml中的資料傳送到hdfs了

在一個agent中配置多個數據流

在一個單一的Flume agent中可以包含多個獨立的資料流,在一個配置檔案中你可以列出多個source、sink 和 channel。這些元件會被連線起來形成多個數據流:

# list the sources, sinks and channels for the agent
<Agent>.sources = <Source1> <Source2>
<Agent>.sinks = <Sink1> <Sink2>
<Agent>.channels = <Channel1> <Channel2>

然後你可以利用相應的channel將對應的 source 和 sink 連線起來形成兩個不同的資料流。例如,如果你需要在一個agent中配置兩個資料流,一個來自外部的avro客戶端流向外部的HDFS,另一個來自外部的 tail 流向avro sink,需要下面這樣的配置:

# 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.avro-forward-sink2.channel = file-channel-2

多agent資料流的配置

為了配置一個多層資料流,你需要將第一跳的 avro/thrift sink指向下一跳的 avro/thrift source。這樣第一個Flume agent就會將event傳送到下一個flume agent中。例如,如果你使用avro 客戶端週期性地傳送一個檔案(每個event一個檔案)到本地的flume agent中,然後這個本地agent將它傳送到下一個agent,然後把它儲存起來。

Weblog agent 配置資訊:

# list sources, sinks and channels in the agent
agent_foo.sources = avro-AppSrv-source
agent_foo.sinks = avro-forward-sink
agent_foo.channels = file-channel

# define the flow
agent_foo.sources.avro-AppSrv-source.channels = file-channel
agent_foo.sinks.avro-forward-sink.channel = file-channel

# avro sink properties
agent_foo.sink.avro-forward-sink.type = avro
agent_foo.sink.avro-forward-sink.hostname = 10.1.1.100
agent_foo.sink.avro-forward-sink.port = 10000

# configure sources
#...

HDFS agent 配置資訊:

# list sources, sinks and channels in the agent
agent_foo.sources = avro-collection-source
agent_foo.sinks = hdfs-sink
agent_foo.channels = mem-channel

# define the flow
agent_foo.sources.avro-collection-source.channels = mem-channel
agent_foo.sinks.hdfs-sink.channel = mem-channel

# avro source properties
agent_foo.sources.avro-collection-source.type = avro
agent_foo.sources.avro-collection-source.bind = 10.1.1.100
agent_foo.sources.avro-collection-source.port = 10000

# configure other pieces
#...

這樣我們就將 weblog agent 的 avro-forward-sink 和 hdfs agent 的 avro-collection-source 連線起來了。最後,來自外部 appserver source 的 event 就儲存在了HDFS中。

注意:1.多agent資料流傳遞,要用ip,不要用localhost 否則傳輸不了

            2.flume傳輸到hdfs要有hadoop的支援,所以如果tomcat那臺伺服器上沒安裝hadoop,用fume收集日誌後不能直接傳到hdfs,要先傳到帶hadoop的伺服器上的flume然後通過這個fume服務傳到hdfs。

           3.flume不能通過type=exec監控到其他伺服器上的tomcat日誌,這也是我們為什麼要先在tomcat伺服器上裝一個flume的原因

扇出資料流

在前面部分我們提到,Flume支援從一個source中扇出資料流到多個 channel 中,Flume有兩種扇出模式,複製和多路複用。在複製資料流中,event 被髮送到所有配置的channel中,在多路複用資料流中,event只被傳送到特定的channel(所有channel的一個子集)中。為了扇出資料流,需要為一個source指定一個channel列表和扇出策略,扇出策略是通過新增channel 的 Selector 完成的,selector 的型別可能是複製也可能是多路複用,如果是多路複用,需要進一步配置選擇規則,如果你不指定一個 Selector 預設就是複製:

# List the sources, sinks and channels for the agent
<Agent>.sources = <Source1>
<Agent>.sinks = <Sink1> <Sink2>
<Agent>.channels = <Channel1> <Channel2>

# set list of channels for source (separated by space)
<Agent>.sources.<Source1>.channels = <Channel1> <Channel2>

# set channel for sinks
<Agent>.sinks.<Sink1>.channel = <Channel1>
<Agent>.sinks.<Sink2>.channel = <Channel2>

<Agent>.sources.<Source1>.selector.type = replicating

多路選擇器為了使資料分流需要進一步的設定,這需要指定一個event的mapping屬性,使event流向指定的channel。selector會檢查在event header中配置的每個屬性,如果它匹配到了特定的值,event會被髮送到那個值對映到的所有channel中,如果沒有匹配的,event會被髮送到若干預設配置的channel:

# Mapping for multiplexing selector
<Agent>.sources.<Source1>.selector.type = multiplexing
<Agent>.sources.<Source1>.selector.header = <someHeader>
<Agent>.sources.<Source1>.selector.mapping.<Value1> = <Channel1>
<Agent>.sources.<Source1>.selector.mapping.<Value2> = <Channel1> <Channel2>
<Agent>.sources.<Source1>.selector.mapping.<Value3> = <Channel2>
#...

<Agent>.sources.<Source1>.selector.default = <Channel2>

每個值的mapping允許channel重疊。
下面有一個單個數據流通過多路選擇流向兩個路徑例子,名叫agent_foo的agent有一個avro source 兩個 channel 連線著兩個 sink:

# 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 會檢查event中一個名叫 State 的 header,如果它的值是CA,這樣的event會被髮送到 channel mem-channel-1 中,如果它的值是 AZ ,這樣的event會被髮送到 channel file-channel-2 中,如果它的值是 NY,這樣的event則會被髮送到兩個channel中,如果State header沒有設值或者沒有匹配到三個中的任何一個,這樣的event會被髮送到 default 設定的 mem-channel-1 中。

Selector 還支援可選擇的 channel,為了設定可選擇的 channel 使用了一個 header,在下面的引數中配置引數optional 被使用:

# 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.optional.CA = mem-channel-1 file-channel-
            
           

相關推薦

Apache Flume 1.6.0 使用者指南

$ telnet localhost 44444 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. Hello world! <ENTER> OK 在

Flume 1.8.0 開發者指南-個人翻譯版

(為了方便學習利用週末翻譯出來的,現在拿出來和大家免費分享,歡迎轉載,但請尊重我個人的勞動成果,請標明來源) (歡迎在評論中交流。如果覺得我翻譯的還可以歡迎讚美和鼓勵,如果發現了翻譯不當之處也歡迎您無須客氣的指出。謝謝!) 介紹 概覽 Apache Flume 是一個

Apache Flume 1.9.0 釋出,日誌伺服器

   Apache Flume 1.9.0 釋出了,Flume 是一個分散式、可靠和高可用的服務,用於收集、聚合以及移動大量日誌資料,使用一個簡單靈活的架構,就流資料模型。這是一個可靠、容錯的服務。 本次更新如下: New Feature [FLUME-2071] - F

[Hadoop] CentOS7 安裝flume-ng-1.6.0-cdh5.7.0

1. Flume 安裝部署 根據官方文件描述,市面上的Flume主流版本有兩個:0.9.x and 1.x。這兩個版本差異非常非常大,舊版本已經被淘汰了,要用的話就使用新版本。當然本文中既定版本為cd

apache hadoop-2.6.0-CDH5.4.1 安裝

apache hadoop-2.6.0-CDH5.4.1 安裝 1.安裝Oracle Java 8 sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install or

Apache Flink 1.3.0正式發布及其新功能介紹

space str either update sse ant 新功能 sid ask 下面文檔是今天早上翻譯的,因為要上班,時間比較倉促,有些部分沒有翻譯,請見諒。 2017年06月01日兒童節 Apache Flink 社區正式發布了 1.3.0 版本。此版本經歷了四個

Flume NG高可用叢集搭建詳解(基於flume-1.7.0

1、Flume NG簡述 Flume NG是一個分散式,高可用,可靠的系統,它能將不同的海量資料收集,移動並存儲到一個數據儲存系統中。輕量,配置簡單,適用於各種日誌收集,並支援 Failover和負載均衡。並且它擁有非常豐富的元件。Flume NG採用的是三層架構:Agent層,Collecto

TC Games全新1.6.0版本上線,劃重點:適配直播,吃雞優化,手機端更輕便更好用

TC Games電腦玩手機遊戲助手1.6.0版本全新上線了,這個版本做了大量調整和優化,一起來看看吧:   1、新增:Ctrl+Alt+P鎖定/解鎖當前遊戲鍵位,切換任何app仍然使用該鍵位不變(僅會員) 備註:可在軟體設定-輸入設定中修改該快捷鍵 2、新增:可將滑鼠

【原始碼】檔名/檔案路徑的自然排序函式NATSORTFILES version 1.6.0.0

函式集NATSORTFILES對檔名或檔案路徑(1xN char)的單元陣列進行排序,同時考慮字串中的所有數字。 The function NATSORTFILES sorts a cellarray of filenames or filepaths (1xN char), ta

昆石VOS3000/VOS2009 2.1.6.00 操作指南相關

使用CentOS 5.X—CentOS 6.X 64位系統安裝 因為VOS3000和VOS2009的使用方法都是一樣的,所以就一起寫了認真看哦!! 需要具體文件可以找博主要。 需要安裝VOS2009/VOS3000 2.1.6.0.0、VOS2009/VOS3000 2.1.4.0、

昆石VOS3000_2.1.6.0.0一鍵安裝教程

使用CentOS 5.X—CentOS 6.X 64位系統安裝 因為VOS3000和VOS2009的安裝方法都是一樣的,所以就一起寫了認真看哦!! 需要安裝VOS2009/VOS3000 2.1.6.0.0、VOS2009/VOS3000 2.1.4.0、呼叫中心、群呼系統、外呼只能



《從01學習Flink》—— Mac 上搭建 Flink 1.6.0 環境並構建執行簡單程式入門

準備工作 1、安裝檢視 Java 的版本號,推薦使用 Java 8。 安裝 Flink 2、在 Mac OS X 上安裝 Flink 是非常方便的。推薦通過 homebrew 來安裝。 brew install apache-flink 複製程式碼 3、檢查安裝: flink --

[漏洞分析]thinkcmf 1.6.0版本從sql注入到任意程式碼執行

0x00 前言 該漏洞源於某真實案例,雖然攻擊沒有用到該漏洞,但在分析攻擊之後對該版本的cmf審計之後發現了,也算是有點機遇巧合的味道,我沒去找漏洞,漏洞找上了我XD thinkcmf 已經非常久遠了,該版本看github上的更新時間已經是4年前了,也就是2014年的時候,那時候我沒學安全呢。。。 &n

Apache Flink 1.7.0 釋出,支援 Scala 2.12

Apache Flink 1.7.0 已釋出,Apache Flink 是一個開源的流處理框架,應用於分散式、高效能、始終可用的、準確的資料流應用程式。 新特性和改進: 支援 Scala 2.12 State Evolution:現在能夠更靈活地調整長時間執行的應用的使用者狀態模式,同時保持與先

Knotes for mac 1.6.0 破解版 — Mac上的Kindle標註管理器

軟體介紹 Knotes for mac是一款 macOS 平臺上非常優秀的Kindle 標註管理工具。這款軟體設計簡潔、功能也非常實用的 。Knotes可以按作者或書籍等方式來管理使用者的標註和筆記,而且還有全文搜尋、同步到印象筆記等一些常用功能,再加上自動匹配書籍封面、匯出 PDF 等優秀功能,每一個Ki

flume 1.6 安裝及配置 日誌採集配置

1.下載flume1.6 2.安裝jdk和Hadoop 具體參照以前wen'文章 3.flume 配置檔案修改 修改conf目錄下的flume-env.sh檔案   export JA

《卡片夾》1.6.0更新了啥?

《卡片夾》1.6.0版本已經發布,新增與優化了很多內容。你難道不去下載試試? 1.6.0主要更新了以下內容: 為圖片新增文字資訊 現在新增圖片以後也可以給文字配上必要的文字資訊,在首頁的圖片卡片上也會顯示相應的文字資訊。 優化新增文字操作體驗 之前的版本出於

Apache Lucene 7.6.0 釋出,Java 全文搜尋引擎

   Apache Lucene 7.6.0 釋出了,下載地址 >>> http://lucene.apache.org/core/downloads。 Lucene 是 Apache 軟體基金會一個開放原始碼的全文檢索引擎工具包,是一個全文檢索引擎

《從01學習Flink》—— Mac 上搭建 Flink 1.6.0 環境並構建執行簡單程式入門

準備工作 1、安裝檢視 Java 的版本號,推薦使用 Java 8。 安裝 Flink 2、在 Mac OS X 上安裝 Flink 是非常方便的。推薦通過 homebrew 來安裝。 brew install apache-flink 3、檢查安裝: f

Apache Flink 1.6.3 釋出,開源流處理框架

   Apache Flink 1.6.3 已釋出,這是 1.6 系列的第三個修復版本,包含80項多項修復及改進,建議所有使用者升級。Apache Flink 是一個開源的流處理框架,應用於分散式、高效能、始終可用的、準確的資料流應用程式。 部分更新內容如下: Improvem