0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Flume的基本架構以及使用案例

jf_78858299 ? 來源:基礎技術研究 ? 作者:張利龍 ? 2023-03-29 13:39 ? 次閱讀

在大數據時代背景下,如何采集出有用的信息已經是大數據發(fā)展的關鍵因素之一,數據采集可以說是大數據產業(yè)的基石。Flume作為開源的數據采集系統,受到了業(yè)界的認可與廣泛應用。本文將帶你了解Flume的基本架構以及使用案例等。

01

Flume簡介

1.1 Flume是什么?

Flume是Apache Software Foundation的頂級項目。它是一個分布式,可靠且可用的系統,主要用于高效地收集,聚合大量日志數據并將其從不同的源移動到集中式數據存儲中。

Flume的使用不僅限于日志數據聚合。由于數據源是可定制的,因此Flume可用于傳輸大量事件數據,包括但不限于網絡流量數據,社交媒體數據,電子郵件消息以及幾乎所有可能的數據源。

1.2 Flume外部結構

數據發(fā)生器產生的數據被所在服務器上的agent收集,之后數據收容器從各個agent上匯集數據并將采集到的數據存入到HDFS或者HBase中。同時,Flume還有如下特點:

  • 使用Flume,我們可以將多個服務器中獲取的數據迅速的移交給Hadoop中;
  • 支持各種接入數據的類型以及接出數據類型;
  • 支持多路徑流量,多管道接入流量,多管道接出流量,上下文路由等;
  • 支持水平擴展。

02

Flume的一些核心概念

Client:客戶端,生產數據,運行在一個獨立的線程。

Event:事件,是一個數據單元,由消息頭和消息體組成。

Agent:一個獨立的Flume進程,包含組件Source、 Channel、 Sink。

Source:數據的收集端,負責將數據捕獲后進行特殊的格式化,將數據封裝到Event里,然后推入Channel中。

Channel:中轉Event的一個臨時存儲,保存由Source組件傳遞過來的Event。

Sink:從Channel中讀取并移除Event, 將Event傳遞到下一個Agent。

2.1 Flume Agent結構

Flume內部有一個或者多個Agent,它是Flume 運行的核心。然而對于每一個Agent來說,它就是一個獨立的守護進程(JVM),它從客戶端或者其他的 Agent接收數據,然后迅速的傳給下一個目的節(jié)點Sink,或者Agent。

Flume以Agent為最小的獨立運行單位。它是一個完整的數據收集工具,含有三個核心組件,分別是Source、 Channel、 Sink。其工作流程為:把數據從數據源(Source)收集過來,在將收集到的數據送到指定的目的地(Sink)。為了保證輸送的過程一定成功,在送到目的地之前,會先緩存數據(Channel),待數據真正到達目的地(Sink)后,Flume再刪除緩存的數據。

2.2 Source

Source 負責數據的產生或搜集,并將數據捕獲后進行特殊的格式化,封裝到Event,然后再推入Channel。一般是對接一些RPC的程序或者是其他的Flume節(jié)點的Sink,從數據發(fā)生器接收數據,并將接收的數據以Event格式傳遞給一個或者多個通道Channel,Flume提供多種數據接收的方式,比如avro、thrift、netcat、sequence generator、syslog、http等,如果內置的Source無法滿足需要, Flume還支持自定義。

2.3Channel

Channel 是一種短暫的存儲容器,負責數據的存儲持久化,可以持久化到jdbc,file,memory,將從Source接收到的Event格式的數據緩存起來,直到它們被Sink消費掉,可以把Channel看成是一個隊列,隊列的優(yōu)點是先進先出,放好后尾部一個個Event出來,Flume比較看重數據的傳輸,因此幾乎沒有數據的解析預處理。僅僅是數據的產生,封裝成Event然后傳輸。數據只有存儲在下一個存儲位置,數據才會從當前的Channel中刪除。這個過程是通過事務來控制的,這樣就保證了數據的可靠性。

不過Flume的持久化也是有容量限制的,比如內存如果超過一定的量,不夠分配,也一樣會爆掉。

2.4 Sink

Sink負責數據的轉發(fā),將數據存儲到集中存儲器比如Hbase和HDFS,它從Channel消費數據并將其傳遞給目標地。目標地可能是另一個Sink,也可能是hdfs、logger、avro、thrift、file、Hbase、solr或者自定義等。

Sink從Channel中取出事件,然后將數據發(fā)到別處,可以向文件系統、數據庫、 hadoop存數據, 也可以是其他agent的Source。在日志數據較少時,可以將數據存儲在文件系統中,并且設定一定的時間間隔保存數據。

Sink支持設置存儲數據位置,在日志數據較少時,可以將數據存儲在文件系中,并且設定一定的時間間隔保存數據。在日志數據較多時,可以將相應的日志數據存儲到Hadoop中,便于日后進行相應的數據分析。

2.5 Event

Flume使用Event對象作為傳遞數據的格式,特點如下:

① Event將傳輸的數據進行封裝,是Flume傳輸數據的基本單位,如果是文本文件,通常是一行記錄。

② Event也是事務的基本單位。

③ Event從Source,流向Channel,再到Sink,本身為一個字節(jié)數組,并可攜帶headers(頭信息)信息。

④ Event代表著一個數據的最小完整單元,從外部數據源來,向外部的目的地去。

一個完整的Event包括:headers、body、Event信息(即文本文件中的單行記錄)。其中body是一個字節(jié)數組,包含了實際的內容,如下圖所示:

圖片

03

Flume攔截器、數據流以及可靠性

3.1 Flume攔截器

當我們需要對數據進行過濾時,除了在Source、 Channel和Sink進行代碼修改之外, Flume為我們提供了攔截器,位于Source和Channel之間,在日志進入到Source之前,對日志進行一些包裝、清洗過濾等動作。

當我們?yōu)镾ource指定攔截器后,會在其中得到Event,根據需求我們可以對Event進行保留還是拋棄,拋棄的數據不會進入Channel中。

3.2 Flume數據流

Flume 的核心是把數據從數據源收集過來,再送到目的地。為了保證輸送成功,在送到目的地之前,會先緩存數據,待數據真正到達目的地后,刪除緩存的數據。

Flume 傳輸數據的基本單位是 Event,如果是文本文件,通常是一行記錄。Event 從 Source,流向 Channel,再到Sink,本身為一個byte數組,并可攜帶 headers 信息。Event 代表著一個數據流的最小完整單元,從外部數據源來,向外部的目的地去。

值得注意的是,Flume提供了大量內置的Source、Channel和Sink類型。不同類型之間可以自由組合。組合方式基于用戶設置的配置文件,非常靈活。比如:Channel可以把事件暫存在內存里,也可以持久化到本地硬盤上。Sink可以把日志寫入HDFS、HBase或其它Source等。Flume支持用戶建立多級流,也就是說,多個agent可以協同工作,這也是Flume強大之處。

3.3 Flume可靠性

Flume可以通過以下方式保證其可靠性:

① Flume保證單次跳轉可靠性的方式:傳送完成后,該事件才會從通道中移除;

② Flume使用事務性的方法來保證事件交互的可靠性;

③ Flume可以將數據可暫存,當目標不可訪問后,數據會暫存在Channel中,等目標可訪問之后,再進行傳輸;

④ 數據處理過程中,如果因為網絡中斷或者其他原因,在某一步被迫結束了,這個數據會在下一次重新傳輸;

⑤ Source和Sink封裝在一個事務的存儲和檢索中,即事件的放置或者提供由一個事務通過通道來分別提供,保證了事件集在流中可靠地進行端到端的傳遞。

04

Flume使用場景****

Flume在英文中的意思是水道,它更像是可以隨意組裝的消防水管,下面根據官方文檔,展示幾種Flow。

4.1 單個agent采集數據

單個Agent收集數據源,存儲到最終的外部系統中,這是最簡單的情況。

4.2 多個agent順序連接

圖片

多個Agent順序連接起來,將最初的數據源經過收集,最終存儲到外部系統中。一般情況下,應該控制這種順序連接的Agent 的數量,因為數據流經的路徑變長了,如果出現故障將影響整個服務。

4.3 多個Agent數據匯集

圖片

日志收集中的一個非常常見的情況是,大量的日志生成客戶端將數據發(fā)送到連接存儲子系統的使用方代理。例如,從數百臺Web服務器收集的日志發(fā)送到多個寫入HDFS群集的代理。

這可以在Flume中實現,方法是為多個第一層代理配置一個avro接收器,它們均指向單個代理的avro源。第二層代理上的此源將接收到的事件合并到一個通道中,該通道由接收器消耗到其最終目地的。

4.4 多級流

圖片

Flume支持多級流,那么什么是多級流呢?我們舉個例子,當syslog, java, nginx、 tomcat等混合在一起的日志流開始流入一個agent后,可以在agent中將混雜的日志流分開,然后給每種日志建立一個自己的傳輸通道。

上面的示例顯示了來自代理“ foo”的源,將流擴展到三個不同的通道。

值得注意的是,當多個agent級聯時,一個Source可以對接多個chanel,但是一個chanel只能對接一個Sink。

05

Flume優(yōu)缺點

5.1 優(yōu)點

① Flume可以將應用產生的數據存儲到多種集中存儲器;

② Flume提供上下文路由特征;

③ Flume的管道是基于事務,保證了數據在傳送和接收時的一致性;

④ Flume是可靠的,容錯性高的,可升級的,易管理的,并且可定制的;

⑤ Flume可以實時的將分析數據并將數據保存在數據庫或者其他系統中;

⑥ 當收集數據的速度超過將寫入數據的時候,也就是當收集信息遇到峰值時,收集的信息非常大,甚至超過了系統的寫入數據能力,這時候,Flume會在數據生產者和數據收容器間做出調整,保證其能夠在兩者之間提供一個平穩(wěn)的數據。

5.2 缺點

Flume的配置比較繁瑣,Source,Channel,Sink的關系在配置文件里面交織在一起,不便于管理。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 數據采集
    +關注

    關注

    38

    文章

    5702

    瀏覽量

    113321
  • 大數據
    +關注

    關注

    64

    文章

    8832

    瀏覽量

    137138
收藏 人收藏

    評論

    相關推薦

    運動控制系統基本架構及控制軌跡要點簡述

    運動控制起源于早期的伺服控制,本文與讀者分享的是運動控制的定義、運動控制系統的基本架構組成以及在運動控制方面幾項運動所需控制軌跡等
    發(fā)表于 04-07 10:47 ?3762次閱讀

    Xilinx FPGA:Virtex-II基本架構

    Xilinx FPGA:Virtex-II基本架構
    發(fā)表于 08-02 23:12

    Flume的運行機制和安裝使用

    (一)Flume的安裝
    發(fā)表于 04-02 06:49

    flume原理介紹

    flume是Apache的一款開源日志收集軟件。在flume中,主要有三個重要的角色:source、channel和sink。source負責收集日志,日志可以是來自任何地方,例如socket,本地
    發(fā)表于 07-10 06:04

    Flume使用方法

    Flume學習筆記
    發(fā)表于 09-23 10:51

    LabVIEW串行通訊的基本架構

    LabVIEW串行通訊的基本架構串行通訊的基本架構是什么?解答: 串口通訊架構每一個異步串行系統的核心都是一個UART(通用異步接收機/發(fā)送機)。UART不僅控制傳輸的數據,相應的電平,同時也控制
    發(fā)表于 05-12 21:08

    TFT基本架構及原理

    TFT基本架構及原理TFT ON / OFF TFT ON / OFF假想示意圖GE 信號OFF時Source和Drain是一斷路狀態(tài)電流無法流通使pixel充電GEG-SiNxa-SiSourceDrain電流GE 信號ON時Source和Drain是一通路狀態(tài)電流由Drai
    發(fā)表于 11-01 15:10 ?35次下載
    TFT基<b class='flag-5'>本架構</b>及原理

    詳解SOA五種基本架構模式

    本文詳細解說了SOA五種基本架構模式,面向服務的架構(SOA)已成為連接復雜服務系統的主要解決方案。雖然SOA的理論很容易理解,但要部署一個設計良好、真正實用的SOA系統卻非常困難。本文試圖通過解析SOA的模式,提供與架構相關的
    的頭像 發(fā)表于 02-07 14:41 ?2.1w次閱讀
    詳解SOA五種基<b class='flag-5'>本架構</b>模式

    51單片機的C程序基本架構詳細說明

    本文檔的主要內容詳細介紹的是51單片機的C程序基本架構詳細說明。
    發(fā)表于 08-15 17:32 ?7次下載
    51單片機的C程序基<b class='flag-5'>本架構</b>詳細說明

    MT-016: DAC基本架構III:分段DAC

    MT-016: DAC基本架構III:分段DAC
    發(fā)表于 03-20 09:03 ?10次下載
    MT-016: DAC基<b class='flag-5'>本架構</b>III:分段DAC

    MT-014:DAC基本架構I, DAC串和溫度計(完全解碼)DAC

    MT-014:DAC基本架構I, DAC串和溫度計(完全解碼)DAC
    發(fā)表于 03-20 10:28 ?7次下載
    MT-014:DAC基<b class='flag-5'>本架構</b>I, DAC串和溫度計(完全解碼)DAC

    MT-015: DAC基本架構II:二進制DAC

    MT-015: DAC基本架構II:二進制DAC
    發(fā)表于 03-21 03:49 ?8次下載
    MT-015: DAC基<b class='flag-5'>本架構</b>II:二進制DAC

    無線網絡協議的基本架構解析

    許多新興物聯網(IoT)無線網絡協議的基礎是兩種基本架構:星形網絡和網狀網絡。
    的頭像 發(fā)表于 04-16 16:29 ?3881次閱讀
    無線網絡協議的基<b class='flag-5'>本架構</b>解析

    三相正弦波逆變電源電原理圖(基本架構)REV1.0

    弦波逆變電源電原理圖(基本架構) ?REV1[1].0
    發(fā)表于 01-29 09:48 ?3次下載

    智能座艙的基本架構有哪些

    智能座艙是指通過集成信息技術,將智能化設備和系統應用于飛機座艙的一種新的航空技術發(fā)展趨勢。其目的是提升航空安全、提高飛行效率、增強乘客體驗、降低維護成本等。智能座艙的基本架構包括以下幾個方面: 機載
    的頭像 發(fā)表于 12-19 10:34 ?1677次閱讀