1. 程式人生 > >www808888webcom基金的一個開源專案19908836661也是apache基金的一個開源

www808888webcom基金的一個開源專案19908836661也是apache基金的一個開源

Flume也是apache基金的一個開源專案,由cloudera公司開發的一款分散式、高可靠、高可用的日誌傳輸工具。其以agent為一個單位,agent由source、channel和sink構成。一個agent最少由一個source、channel和sink構成,數量可以自由組合

Source主要用來收集源資料,並對源資料進行反序列化。Source在讀取資料檔案時,會遍歷日誌檔案中的每一行,並把這一行封裝在一個event當中,一個event包含一個header和一個body,header是一個頭檔案,存放著這個event的一些資訊資料,body存放的是我們實際要傳輸的資料。

Channel是一個數據的聚合和暫時存放的地方,資料在channel中存放的時間不會很長,可以根據配置被sink取走。其型別可以為記憶體、jdbc和file等

Sink負責將channel的資料傳輸到目的端,並且可以在傳輸過程中指定資料落地的方式的順序。型別可以由hdfs、kafka、hbase等。

Flume的高可用和高可靠性體現在1.在source和channel之間資料傳輸和channel和sink之間用事務的方式來保證資料傳輸的可靠性,當有一個環節資料傳輸失敗時,事務會進行回滾,並進行重新傳輸。2。Flume可以通過在日誌伺服器部署多套來防止單點故障的問題,當一個flume節點出現故障時,可以自動進行故障轉移。

第二部分 flume的幾種常見架構的應用

一、鏈式結構

Hadoop學習筆記系列四:hadoop專案流程-傳輸工具flume(一)

此種結構適合資料需要處理的情況,每一個agent環境進行一次資料處理,這種鏈式結構可以進行多次資料處理,並且使資料處理更加靈活。

二、分散式架構

Hadoop學習筆記系列四:hadoop專案流程-傳輸工具flume(一)

此種架構適合於避免單點故障的高可用場景和多個源資料存放的場景,通過在一臺機器上部署多個agent達到高可用,可以在多個數據源的伺服器上同時進行資料來源的收集。當然此種場景也可以倒過來使用,通過一個agent收集單一資料來源可以分別往不用的目的端進行分發

三、網狀結構

Hadoop學習筆記系列四:hadoop專案流程-傳輸工具flume(一)

此種架構基於flume的agent的三個元件數量的靈活性,可以自由組合,滿足更復雜的業務場景。

第三部分 flume詳情和配置

www808888webcom基金的一個開源專案19908836661也是apache基金的一個開源
一.Source

Source主要用來獲取源資料並推送給channel,source支援的型別主要有

(1) Avro source

監聽Avro埠,從Avro client streams接收events。

(2) Thrift source

監聽Thrift埠和從外部Thrift client streams接收events

(3) exec source

Exec Source在啟動時執行一個Unix命令列,並期望這過程在標準輸出上連續生產資料,經常結合linux命令的tail -f xxx.log命令來不斷獲取最新日誌

(4) JMS source

從jms目標(如佇列或者主題)讀取訊息。JMS應用程式應該可以與任何JMS提供程式一起工作,但是隻能使用ActiveMQ進行測試

(5) Spooling Directory source

source讓你通過放置被提取檔案在磁碟”spooling“目錄下這一方式,提取資料。該source將會監控指定目錄的新增檔案,當新檔案出現時解析event。event解析邏輯是可插入的。當一個給定檔案被全部讀取進channel之後,它被重新命名,以標識為已完成(或者可選擇deleted)

(6) kaska source

Kafka Source是Apache Kafka消費者,從Kfaka topics讀取訊息。如果你有多個Kafka source在跑,你可以配置它們在相同的Consumer Group,以使它們每個讀取topics獨特的分割槽。

(7) netcat tcp source

netcat source監聽一個給定的埠,然後把text檔案的每一行轉換成一個event。

Flume source支援的型別還有很多,這裡只列舉常見的幾種,在flume的官方網站上有詳細的型別解釋和配置要求。

  1. Flume source攔截器

攔截器(interceptor)在配置在source和channel之間的,用來做資料的攔截,一般有:

(1)timestamp interceptor ,在event的header中新增一個key為timestamp,value為當前的時間戳,可以通過配置,讓source按照配置的時間範圍來給channel推送資料

(2)Host interceptor 在event的header中新增一個key為host,value為當前的機器的hostname或者ip,可以通過hostname或者ip來篩選資料

(3)Static interceptor 在event的header中自定義新增一個key value的值,按照關鍵字來篩選源資料

(4)Regex filtering interceptor 通過正則表示式來篩選包含匹配值的events

(5)Regex Extractor Interceptor 在header中新增key value值通過正則表示式來篩選合適的資料

今天先到這裡,還有幾個問題,header和event的詳情,以及詳細的安裝配置和執行,還有channel和sink留給明天吧!