全部產品
Search
文件中心

E-MapReduce:Flume

更新時間:Mar 13, 2025

Apache Flume是一個分布式、可靠和高可用的系統,可以從大量不同的資料來源有效地收集、彙總和移動日誌資料,從而集中式的儲存資料。

使用情境

Flume使用最多的情境是日誌收集,也可以通過定製Source來傳輸其他不同類型的資料。

Flume最終會將資料落地到Realtime Compute平台(例如Flink、Spark Streaming和Storm)、離線計算平台上(例如MR、Hive和Presto),也可僅落地到資料存放區系統中(例如HDFS、OSS、Kafka和Elasticsearch),為後續分析資料和清洗資料做準備。flume2

架構

Flume Agent是一個Flume的執行個體,本質是一個JVM進程,控制Event資料流從生產者傳輸到消費者。一個Flume Agent由Source、Channel、Sink組成。其中,Source和Channel可以是一對多的關係,Channel和Sink也可以是一對多的關係。flume

基本概念

名稱

描述

Event

是資料流通過Flume Agent的基本單位。Event由一個可選的Header字典和一個裝載資料的位元組數組組成。

樣本如下。

--------------------------------
| Header (Map) | Body (byte[]) |
--------------------------------
               Flume Event

Source

是資料來源收集器,從外部資料源收集資料,並批量發送到一個或多個Channel中。

常見Source如下:

  • Avro Source:通過監聽Avro連接埠擷取Avro Client發送的事件。Avro是Hadoop提供的一種協議,用於資料序列化。

  • Exec Source:通過監聽命令列輸出擷取資料,例如tail -f /var/log/messages

  • NetCat TCP Source:監聽指定TCP連接埠擷取資料,與Netcat UDP Source類似。

  • Taildir Source:監控目錄下的多個檔案,記錄位移量,並且不會遺失資料,較為常用。

Channel

是Source和Sink之間的緩衝隊列。

常見Channel如下:

  • Memory Channel:緩衝到記憶體中,效能高,較為常用。

  • File Channel:緩衝到檔案中,會記錄Checkpoint和DATA檔案,可靠性高,但效能較差。

  • JDBC Channel:緩衝到關係型資料庫中。

  • Kafka Channel:通過Kafka來快取資料。

Sink

從Channel中擷取Event,並將以事務的形式Commit到外部儲存中。一旦事務Commit成功,該Event會從Channel中移除。

常見Sink如下:

  • Logger Sink:用於測試。

  • Avro Sink:轉換成Avro Event,主要用於串連多個Flume Agent。

  • HDFS Sink:寫入HDFS,較為常用。

  • Hive Sink:寫入Hive表或分區,使用Hive事務寫Events。

  • Kafka Sink:寫入Kafka。