大数据摄取:Flume,Kafka和NiFi
初賽
在構建大數據管道時,我們需要考慮如何吸收出現在通常是Hadoop生態系統大門口的數據量,多樣性和速度。 在決定采用哪種工具來滿足我們的要求時,諸如可伸縮性,可靠性,適應性,開發時間成本等方面的初步考慮都將發揮作用。 在這篇文章中。 我們將簡要介紹三個Apache提取工具: Flume , Kafka和NiFi 。 所有這三種產品均具有出色的性能,可以水平縮放,并提供一種插件架構,可以通過自定義組件擴展功能。
阿帕奇水槽
Flume部署由一個或多個配置了拓撲的代理組成。 Flume Agent是一個JVM進程,它承載Flume拓撲的基本構建塊,即源,通道和接收器。 Flume客戶端將事件發送到源,源將這些事件成批放置到稱為通道的臨時緩沖區中,然后數據從那里流到連接到數據最終目標的接收器。 接收器也可以是其他Flume代理的后續數據源。 代理可以鏈接起來,并且每個都有多個源,通道和接收器。
Flume是一個分布式系統,可用于收集,聚合流事件并將其傳輸到Hadoop中。 它帶有許多內置源,通道和接收器,例如Kafka Channel和Avro接收器。 Flume基于配置,并具有攔截器 ,可對運行中的數據執行簡單的轉換。
如果不小心,很容易使用Flume丟失數據。 例如,選擇內存通道以實現高吞吐量具有不利的一面,即當代理程序節點發生故障時,數據將丟失。 文件通道將以增加延遲為代價提供持久性。 即使這樣,由于數據不會復制到其他節點,因此File通道僅與基礎磁盤一樣可靠。 Flume確實通過多跳/扇入扇出流提供了可伸縮性。 對于高可用性(HA),可以水平縮放代理。
阿帕奇·卡夫卡
Kafka是一種分布式的高吞吐量消息總線,可將數據生產者與消費者分離 。 消息按主題進行組織,主題被劃分為多個分區,并且跨集群中的節點(稱為代理)復制分區。 與Flume相比,Kafka具有更好的可伸縮性和消息持久性。 Kafka現在有兩種形式:“經典”生產者/消費者模型,以及新的Kafka-Connect ,它提供了到外部數據存儲的可配置連接器(源/接收器)。
Kafka可用于事件處理以及大型軟件系統的組件之間的集成。 開箱即用地處理數據峰值和背壓 (快速生產,緩慢消費)。 此外,Kafka附帶有Kafka Streams ,可以將其用于簡單的流處理,而無需像Apache Spark或Apache Flink那樣需要單獨的集群。
由于消息在磁盤上持久保存并在群集中復制,因此數據丟失的情況比Flume少見。 也就是說,使用Kafka客戶端或通過Connect API,生產者/源和消費者/接收者通常需要自定義編碼。 與Flume一樣,郵件大小也有限制。 最后,為了能夠進行通信,Kafka的生產者和消費者都必須就協議,格式和模式達成共識,這在某些情況下可能會出現問題。
Apache NiFi
NiFl與Flume和Kafka不同。 可以處理任意大小的消息。 NiFi在基于Web的拖放式UI的背后,在群集中運行,并提供實時控制,可輕松管理任何源與任何目標之間的數據移動。 它支持格式,架構,協議,速度和大小不同的分散源。
NiFi可以用于具有嚴格安全性和合規性要求的關鍵任務數據流,我們可以在其中可視化整個過程并立即進行實時更改。 在撰寫本文時,它具有近200個開箱即用的處理器(包括Flume和Kafka處理器),可以立即拖放,配置和投入使用。 NiFi的一些關鍵功能是優先排序隊列,數據可追溯性和每個連接的背壓閾值配置。
盡管NiFi用來創建容錯生產流水線,但它尚未像Kafka一樣復制數據。 如果某個節點發生故障,則可以將流定向到另一個節點,但是排隊到故障節點的數據將不得不等待,直到該節點恢復正常。 NiFi并不是成熟的ETL工具,也不是復雜計算和事件處理( CEP )的理想選擇。 為此,它應該連接到Apache Flink,Spark Streaming或Storm之類的流框架。
組合方式
沒有一個可以同時完成所有任務并滿足您所有需求的單一工具。 結合使用以更好的方式完成不同任務的工具,可以增強功能,并在處理更多場景時增加靈活性。 根據您的需求,NiFi和Flume都可以充當Kafka的生產者和/或消費者。
Flume-Kafka集成非常流行,它有自己的名字: Flafka (我沒有做這個)。 Flafka包括一個Kafka源,Kafka頻道和Kafka水槽。 將Flume和Kafka結合使用可使Kafka避免自定義編碼,并利用Flume經過實戰檢驗的源和接收器,而通過Kafka渠道存儲的Flume事件將在Kafka經紀人之間存儲和復制,以實現彈性。
組合工具可能看起來很浪費,因為它似乎在功能上造成了一些重疊。 對于 ? 例如,NiFi和Kafka都提供經紀人來聯系生產者和消費者。 但是,它們的做法有所不同:在NiFi中,大部分數據流邏輯不是位于生產者/消費者內部,而是位于代理中,從而可以進行集中控制。 NiFi的創建是為了做好一件重要的事情: 數據流管理 。 結合使用這兩種工具,NiFi可以利用Kafka可靠的流數據存儲,同時解決Kafka并非旨在解決的數據流挑戰。
結論
總結:
還有更多要討論的內容,但這將是書的主題而不是文章。 另外,由于此處提到的工具正在Swift發展,因此與所有其他有關新興技術的簡短分析一樣,遲早也必將過時。
翻譯自: https://www.javacodegeeks.com/2017/07/big-data-ingestion-flume-kafka-nifi.html
總結
以上是生活随笔為你收集整理的大数据摄取:Flume,Kafka和NiFi的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用JUnit 5进行更清洁的参数化测试
- 下一篇: 华为荣耀8x手机参数配置(华为荣耀8x版