动态

详情 返回 返回

【趙渝強老師】大數據日誌採集引擎Flume - 动态 详情

Apache Flume支持採集各類數據發送方產生的日誌信息,並且可以將採集到的日誌信息寫到各種數據接收方。其核心是把數據從數據源(Source)收集過來,在將收集到的數據送到指定的目的地(Sink)。為了保證輸送的過程一定成功,在送到目的地(Sink)之前,會先緩存數據(Channel),待數據真正到達目的地(Sink)後,Flume再刪除自己緩存的數據。

一、 Apache Flume的體系架構

Flume 分佈式系統中核心的角色是Agent。Agent 本身是一個 Java 進程,一般運行在日誌收集節點。Flume採集系統就是由一個個Agent所連接起來形成。每一個Agent相當於一個數據傳遞員,內部有三個組件:

  • Source:採集源,用於跟數據源對接,以獲取數據;
  • Sink:下沉地,採集數據的傳送目的,用於往下一級 agent 傳遞數據或者往最終存儲系統傳遞數據;
  • Channel:agent 內部的數據傳輸通道,用於從 source 將數據傳遞到 sink;

在整個數據的傳輸的過程中,流動的是Event。它是Flume內部數據傳輸的最基本單元。Event將傳輸的數據進行封裝。如果是文本文件,通常是一行記錄,Event也是事務的基本單位。Event從 Source,流向 Channel,再到 Sink,本身為一個字節數組,並可攜帶 headers的頭信息。Event代表着一個數據的最小完整單元,從外部數據源來,向外部的目的地去。一個完整的 Event包括:event headers、event body、event 信息,其中Event信息就是Flume 收集到的日記記錄。

視頻講解如下:
https://www.bilibili.com/video/BV1PoW1zLEVW/?aid=115405855201...

下圖展示了Flume的體系架構。
image.png

二、 【實戰】Apache Flume的安裝和部署

從Flume的官方網站上下載安裝介質,這使用的版本是1.9.0。下面通過具體的步驟來演示Flume的安裝和部署。
(1)將Flume的安裝包解壓到/root/training/目錄下。

tar -zxvf apache-flume-1.9.0-bin.tar.gz -C ~/training/

(2)重命名解壓縮的文件夾為Flume。

cd /root/training
mv apache-flume-1.9.0-bin/ flume/

(3)進入Flume下的conf文件夾將文件flume-env.sh.template重命名為flume-env.sh。

cd /root/training/flume/conf/
mv flume-env.sh.template flume-env.sh

(4)修改flume-env.sh中的JAVA HOME配置參數。

export JAVA_HOME=/root/training/jdk1.8.0_181

(5)保存退出並驗證Flume的版本。

cd /root/training/flume
bin/flume-ng version

三、 【實戰】運行Flume的第一個任務

下面通過一個簡單的示例來演示如何Flume採集數據。
(1)在Flume安裝目錄創建myagent目錄並在myagent目錄下創建配置文件a1.conf。

#定義agent名, source、channel、sink的名稱
a1.sources = r1
a1.channels = c1
a1.sinks = k1

#具體定義source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 1234

#具體定義channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

#具體定義sink
a1.sinks.k1.type = logger

#組裝source、channel、sink
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

(2)進入Flume的安裝目錄執行下面的語句命令啓動Agent。

bin/flume-ng agent -n a1 -f myagent/a1.conf \
-c conf -Dflume.root.logger=INFO,console


# 通過打印出來的日誌的最後一行,如下:
Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:1234]

# Flume已經成功地在本機的1234端口上創建了Socket Server。
# 這時候只要有消息從本機的1234端口上發送過來,就可以被Flume的Source捕獲。

(3)單獨啓動一個Netcat命令終端運行在本機的1234端口上。

nc 127.0.0.1 1234

(4)在netcat中輸入一些內容並回車;觀察Flume命令行窗口的變化。如下圖所示。
image.png

可以看到在Flume終端的日誌中,輸出瞭如下的信息:

[INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] 
Event: { headers:{} body: 48 65 6C 6C 6F 20 46 6C 75 6D 65 Hello Flume }

Flume通過Netcat Source採集到了相應的數據信息,並直接打印在Flume的命令行終端中。

user avatar ciel717 头像
点赞 1 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.