01_Flume之介紹入門

1.概述

Flume是一個高可靠、高可用、分布式的用于不同數(shù)據(jù)源的流式數(shù)據(jù)采集、收集、聚合系統(tǒng)。flume最簡單的數(shù)據(jù)流模型如下圖所示。

Flume是Cloudera提供的一個高可靠、高可用、分布式的用于不同數(shù)據(jù)源的流式數(shù)據(jù)采集、收集、聚合系統(tǒng)。

Flume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時,F(xiàn)lume提供對數(shù)據(jù)進(jìn)行簡單處理,并寫到各種數(shù)據(jù)接收方(可定制)的能力,一般的采集需求,通過對flume的簡單配置即可實現(xiàn)。針對特殊場景也具備良好的自定義擴(kuò)展能力。因此,flume可以適用于大部分的日常數(shù)據(jù)采集場景。。

Agent就是一個Java進(jìn)程,它接收來自外部的數(shù)據(jù),并將數(shù)據(jù)傳遞到數(shù)據(jù)中心(如HDFS、HBase等)或下一個Agent。一個Agent有Source、Channel、Sink三大組件組成,通過配置文件可以將組件連接在一起從而形成數(shù)據(jù)流。

Flume的核心是把數(shù)據(jù)從數(shù)據(jù)源(source)收集過來,再將收集到的數(shù)據(jù)送到指定的目的地(sink)。為了保證輸送的過程一定成功,在送到目的地(sink)之前,會先緩存數(shù)據(jù)(channel), 待數(shù)據(jù)真正到達(dá)目的地(sink)后,flume在刪除自己緩存的數(shù)據(jù)。

當(dāng)前Flume有兩個版本。Flume 0.9X版本的統(tǒng)稱Flume OG(original generation),F(xiàn)lume1.X版本的統(tǒng)稱Flume NG(next generation)。由于Flume NG經(jīng)過核心組件、核心配置以及代碼架構(gòu)重構(gòu),與Flume OG有很大不同,使用時請注意區(qū)分。改動的另一原因是將Flume納入 apache 旗下,Cloudera Flume 改名為 Apache Flume。

2. 基本概念

Client:Client生產(chǎn)數(shù)據(jù),運行在一個獨立的線程。

Event: 一個數(shù)據(jù)單元,消息頭和消息體組成。(Events可以是日志記錄、 avro 對象等。)

Flow: Event從源點到達(dá)目的點的遷移的抽象。

Agent: 一個獨立的Flume進(jìn)程,包含組件Source、 Channel、 Sink。(Agent使用JVM 運行Flume。每臺機(jī)器運行一個agent,但是可以在一個agent中包含多個sources和sinks。)

Source: 數(shù)據(jù)收集組件。(source從Client收集數(shù)據(jù),傳遞給Channel)

Channel: 中轉(zhuǎn)Event的一個臨時存儲,保存由Source組件傳遞過來的Event。(Channel連接 sources 和 sinks ,這個有點像一個隊列。)

Sink: 從Channel中讀取并移除Event, 將Event傳遞到FlowPipeline中的下一個Agent(如果有的話)(Sink從Channel收集數(shù)據(jù),運行在一個獨立線程。)

3.運行機(jī)制

Flume系統(tǒng)中核心的角色是agent,agent本身是一個Java進(jìn)程,一般運行在日志收集節(jié)點。

image.png

每一個agent相當(dāng)于一個數(shù)據(jù)傳遞員,內(nèi)部有三個組件:

Source:采集源,用于跟數(shù)據(jù)源對接,以獲取數(shù)據(jù);

Sink:下沉地,采集數(shù)據(jù)的傳送目的,用于往下一級agent傳遞數(shù)據(jù)或者往最終存儲系統(tǒng)傳遞數(shù)據(jù);

Channel:agent內(nèi)部的數(shù)據(jù)傳輸通道,用于從source將數(shù)據(jù)傳遞到sink;

在整個數(shù)據(jù)的傳輸?shù)倪^程中,流動的是event,它是Flume內(nèi)部數(shù)據(jù)傳輸?shù)淖罨締卧?。event將傳輸?shù)臄?shù)據(jù)進(jìn)行封裝。如果是文本文件,通常是一行記錄,event也是事務(wù)的基本單位。event從source,流向channel,再到sink,本身為一個字節(jié)數(shù)組,并可攜帶headers(頭信息)信息。event代表著一個數(shù)據(jù)的最小完整單元,從外部數(shù)據(jù)源來,向外部的目的地去。

Event是Flume數(shù)據(jù)流傳輸過程中的一個基本單位,由一個可選的header(鍵值對)和body組成。header主要用于表示數(shù)據(jù)屬性及路由信息,body部分存儲的是byte數(shù)組,用于表示數(shù)據(jù)本身。Event也是事務(wù)的基本單位。

4.Flume采集系統(tǒng)結(jié)構(gòu)圖

4.1.簡單結(jié)構(gòu)

單個agent采集數(shù)據(jù)

image.png
4.2.復(fù)雜結(jié)構(gòu)

多級agent之間串聯(lián)

image.png

5. 安裝啟動

安裝包下載安裝

[kevin@hadoop112 software]$ tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /opt/module/
  • 改名
[kevin@hadoop112 software]$ cd /opt/module/
[kevin@hadoop112 module]$ mv apache-flume-1.9.0-bin flume-1.9.0
  • 配置
[kevin@hadoop112 module]$ cd flume-1.9.0/conf/
[kevin@hadoop112 conf]$ mv flume-env.sh.template flume-env.sh
[kevin@hadoop112 conf]$ vim flume-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_241
# 優(yōu)化項
export JAVA_OPTS="-Xms1024m -Xmx3072m -Dcom.sun.management.jmxremote"

測試--監(jiān)控端口數(shù)據(jù)官方案例

  • 安裝 netcat 工具
[kevin@hadoop112 flume-1.9.0]$ sudo yum install -y nc
  • 判斷 44444 端口是否被占用
 [kevin@hadoop112 flume-1.9.0]$ sudo netstat -tunlp | grep 44444
  • 創(chuàng)建 Flume Agent 配置文件 flume-netcat-logger.conf
[kevin@hadoop112 flume-1.9.0]$ mkdir jobs
[kevin@hadoop112 flume-1.9.0]$ cd jobs/
[kevin@hadoop112 jobs]$ touch flume-netcat-logger.conf
[kevin@hadoop112 jobs]$ vim flume-netcat-logger.conf
  • 在 flume-netcat-logger.conf 文件中添加如下內(nèi)容。
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# Describe the sink
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
  • 先開啟 flume 監(jiān)聽端口
[kevin@hadoop112 flume-1.9.0]$ bin/flume-ng agent -c conf/ -n a1 -f jobs/flume-netcat-logger.conf -Dflume.root.logger=INFO,console

這里成了阻塞進(jìn)程

參數(shù)說明:

--conf/-c:表示配置文件存儲在 conf/目錄

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

--conf-file/-f:flume 本次啟動讀取的配置文件是在 job 文件夾下的 flume-telnet.conf

文件。

-Dflume.root.logger=INFO,console :-D 表示 flume 運行時動態(tài)修改 flume.root.logger

參數(shù)屬性值,并將控制臺日志打印級別設(shè)置為 INFO 級別。日志級別包括:log、info、warn、

error。

  • 另開一個會話,使用 netcat 工具向本機(jī)的 44444 端口發(fā)送內(nèi)容
[kevin@hadoop112 ~]$ nc localhost 44444

# 然后在這個會話隨便輸入一些內(nèi)容,回車,回看上面的阻塞進(jìn)程是否接收到這里所輸入的內(nèi)容
  • 退出 Ctrl + C

其它筆記:

Flume的學(xué)習(xí)筆記flume checkpoint白居不易.的博客-CSDN博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容