瞭解有關Apache Flume和數據管道

什麼是Apache Flume?

Apache Flume是一種高效,分佈式,可靠且容錯的數據提取工具。它有助於將來自各種來源(如Web服務器)的大量日誌文件流式傳輸到Hadoop分佈式文件系統(HDFS),分佈式數據庫(如HDFS上的HBase),甚至是近實時速度的Elasticsearch等目的地。除了流式傳輸日誌數據,Flume還可以傳輸從Twitter,Facebook和Kafka Brokers等Web源生成的事件數據。

Apache Flume的歷史

Apache Flume由Cloudera開發,旨在提供一種快速可靠地將Web服務器生成的大量日誌文件流式傳輸到Hadoop的方法。在那裡,應用程序可以對分佈式環境中的數據執行進一步分析。最初,Apache Flume開發用於僅處理日誌數據。之後,它也可以處理事件數據。

HDFS概述

HDFS代表Hadoop分佈式文件系統。HDFS是Apache開發的一種工具,用於在分佈式平臺上存儲和處理大量非結構化數據。許多數據庫通過利用網絡中多個系統的計算能力,使用Hadoop以可擴展的方式快速處理大量數據。Facebook,雅虎和LinkedIn很少有依賴Hadoop進行數據管理的公司。

為何選擇Apache Flume?

跨多個服務器和主機運行多個Web服務的組織將每天生成大量日誌文件。這些日誌文件將包含有關審計和分析目的所需的事件和活動的信息。它們的大小可以達到太字節甚至幾千兆字節,並且可以花費大量的開發工作和基礎架構成本來分析它們。

Flume在構建日誌數據文件的數據管道時是一種流行的選擇,因為它具有簡單性,靈活性和功能 - 如下所述。

Flume的特點和功能

Flume通過從多個源中提取原始日誌文件並將它們傳輸到Hadoop文件系統來傳輸原始日誌文件。在那裡,日誌文件可以被Spark或Kafka等分析工具使用。Flume可以連接到各種插件,以確保將日誌數據推送到正確的目的地。

瞭解有關Apache Flume和數據管道

將日誌文件傳輸到多個源

使用Apache Flume流式傳輸數據:架構和示例

需要對通過Apache Flume傳輸數據的過程進行規劃和架構,以確保以有效的方式傳輸數據。

要將數據從Web服務器傳輸到HDFS,Flume配置文件必須包含有關從哪裡獲取數據以及將數據推送到何處的信息。提供這些信息很簡單; Flume的源組件從源或數據生成器中獲取日誌文件,並將其發送到引導數據的代理程序。在此過程中,要流式傳輸的數據存儲在存儲器中,該存儲器旨在到達它將隨之下沉的目的地。

建築

Apache Flume的數據流架構有三個重要部分:數據生成源,Flume代理以及目標或目標。Flume劑由Flume源,通道和水槽組成。Flume源從Web服務器和Twitter等數據生成源中獲取日誌文件,並將其發送到通道。Flume的接收器組件確保它接收的數據同步到目標,可以是HDFS,HDFS上的HBase等數據庫,也可以是Spark等分析工具。

以下是用於HDFS接收器的Flume的基本架構:

瞭解有關Apache Flume和數據管道

水槽建築

源,通道和接收器組件是Flume代理的一部分。在傳輸大量數據時,可以將多個Flume代理配置為從多個源接收數據,並且可以將數據並行流式傳輸到多個目標。

Flume架構可根據數據流要求而有所不同。Flume可以配置為將來自多個源和客戶端的數據流式傳輸到單個目標或從單個源流式傳輸到多個目標。這種靈活性非常有用。下面是兩個如何將這種靈活性構建到Flume架構中的示例:

  1. 從多個源流式傳輸到單個目標
瞭解有關Apache Flume和數據管道

集中數據存儲

在此體系結構中,數據可以從多個客戶端流式傳輸到多個代理程序。數據收集器從所有三個代理中獲取數據並將其發送到目標(集中式數據存儲)。

  1. 數據從單個客戶端流式傳輸到多個目標
瞭解有關Apache Flume和數據管道

客戶

在此示例中,兩個Apache代理(可根據要求配置更多代理)獲取數據並將其同步到多個目標。

當需要將不同數據集從一個客戶端流式傳輸到兩個不同的目的地(例如,HDFS和HBase用於分析目的)時,此體系結構很有用。Flume可以識別特定的來源和目的地。

將Flume與分佈式數據庫和工具集成

除了能夠將數據從多個源流式傳輸到多個目的地之外,Flume還可以與各種工具和產品集成。它可以從幾乎任何類型的源中提取數據,包括Web服務器日誌文件,從RDBMS數據庫生成的CSV文件以及事件。同樣,Flume可以將數據推送到HDFS,HBase和Hive等目的地。

Flume甚至可以與其他數據流工具集成,如Kafka和Spark。

以下示例說明了Flume的集成功能。

從Twitter將日誌數據流式傳輸到HDFS

如前所述,Flume可以將數據從Twitter等Web源傳輸到駐留在HDFS上的目錄。這是實時場景的典型要求。要實現這一點,必須將Flume配置為從源(源類型)中獲取數據並將數據接收到目標(目標類型)。這裡的源類型是Twitter,接收器類型是HDFS-SINK。完成接收器後,Spark等應用程序可以對HDFS執行分析。

瞭解有關Apache Flume和數據管道

從Twitter將數據記錄到HDFS

使用Flume將日誌數據從Kafka流式傳輸到HDFS

Kafka是一個消息代理,它可以將網頁上生成的實時數據和消息流式傳輸到目標,如數據庫。如果您需要將這些消息流式傳輸到HDFS上的某個位置,Flume可以使用Kafka Source提取數據,然後使用HDFS接收器將其同步到HDFS。

瞭解有關Apache Flume和數據管道

從HDFS記錄Kafka的數據

將日誌數據流式傳輸到Elasticsearch

Flume可用於將日誌數據流式傳輸到Elasticsearch,這是一種流行的開源工具,可用於以可擴展的方式在分佈式環境中快速執行大量JSON數據上的複雜文本搜索操作。它建立在Lucene之上,利用Lucene的功能在JSON上執行基於索引的搜索。

Flume可以將JSON文檔從Web服務器傳輸到Elasticsearch,以便應用程序可以從Elasticsearch訪問數據。JSON文檔可以在分佈式環境中快速可靠地直接流式傳輸到Elasticsearch。Flume通過其ElasticsearchSink功能識別ELK目的地 。Elasticsearch應與FlumeSink插件一起安裝,以便將Flume識別為接受數據流的源。Flume以索引文件的形式將數據流式傳輸到Elasticsearch目標。默認情況下,每天使用默認命名格式“flume-yyyy-MM-dd”對一個索引文件進行流式處理,可以在Flume配置文件中進行更改。

瞭解有關Apache Flume和數據管道

將數據記錄到Elastisearch

Apache Flume的侷限性

Apache Flume確實有一些限制。對於初學者來說,當將數據從多個源流式傳輸到多個目的地時,其架構可能變得複雜且難以管理和維護。

此外,Flume的數據流不是100%實時。如果需要更多的實時數據流,可以使用像Kafka這樣的替代品。

雖然Flume可能將重複數據流式傳輸到目標,但可能很難識別重複數據。此挑戰將根據數據流傳輸到的目標類型而有所不同。

摘要

Apache Flume是一個強大,可靠且分佈式的工具,可以幫助從多個源流式傳輸數據,它是流式傳輸大量原始日誌數據的最佳選擇。它與現代實時數據流工具集成的能力使其成為一種流行且高效的選擇。


分享到:


相關文章: