有關Apache NiFi的5大常見問題

語言: CN / TW / HK

在過去的幾週中,我進行了四個現場的NiFi演示會議,在不同地理區域有1000名與會者,向他們展示瞭如何使用NiFi聯結器和處理器連線到各種系統。我要感謝大家參與和出席這些活動!如今,當在家中遠端工作成為一種規範時,我們都需要互動式的演示會議和實時問答。如果您還沒有看過我的現場演示會議,可以在這裡觀看,視訊還沒有過期。 

在這些活動中,我收到了數百個問題,我和我的同事們試圖儘可能地回答。如所承諾的,這是我對一些最常見問題的解答。 

MiNiFi和NiFi有什麼區別?

MiNiFi是用於從遠端位置的感測器和裝置上收集資料子集的代理。目的是幫助進行資料的“第一英里收集”,並獲取儘可能接近其來源的資料。 

這些裝置可以是伺服器、工作站和行動式計算機,也可以是感測器、自動駕駛汽車、工廠中的機器等,您希望在其中使用MiNiFi中的某些NiFi功能來收集特定資料。在將資料傳送到目的地之前,可以對其進行過濾、選擇和分類。MiNiFi的目標是使用Edge Flow Manager大規模管理整個流程,以便運營或IT團隊可以部署不同的流程定義並根據業務需要收集任何資料。以下是一些需要考慮的細節:

  • NiFi被設計為通常位於資料中心或雲中的中央位置,以在已知的外部系統(如資料庫、物件儲存等)中移動資料或從中收集資料。NiFi應該被視為將資料移回的閘道器在異構環境或混合雲體系結構中來回切換。

  • MiNiFi在主機上本地執行,進行一些計算和邏輯運算,並且僅將您關心的資料傳送到外部系統以進行資料分發。這樣的系統當然可以是NiFi,但也可以是MQTT代理、雲提供商服務等。MiNiFi還支援一些用例,在這些用例中,網路頻寬可能受到限制,需要減少通過網路傳送的資料量。  

  • MiNiFi代理有兩個版本:C ++和Java。MiNiFi C ++選項的佔用空間非常小(幾MB的記憶體,很少的CPU),但是可用的處理器卻更少。MiNiFi Java選項是輕量級的NiFi單節點例項,是NiFi的無頭版本,他沒有使用者介面也沒有叢集功能。儘管如此,它仍要求Java在主機上可用。

如果可以使用Kafka作為群集的入口點,為什麼還要使用NiFi?

這是一個很好的問題,許多參加我的Live NiFi Demo Jam的人都問了這個問題。您可以通過以下方式確定何時使用NiFi和何時使用Kafka。 

  • Kafka設計用於主要針對較小檔案的面向流的用例,然而攝取大檔案不是一個好主意。NiFi完全與資料大小無關,因為檔案大小與NiFi無關。

  • Kafka就像一個將資料儲存在Kafka主題中的郵箱,等待應用程式釋出和/或使用它。NiFi就像郵遞員一樣,將資料傳遞到郵箱或其他目的地。

  • NiFi提供了廣泛的協議(MQTT、Kafka協議、HTTP、Syslog、JDBC、TCP / UDP等)可以在資料匯入時進行互動。NiFi是一款出色、一致且獨特的軟體,可以管理您的所有資料提取。您可能要考慮將資料傳送到Kafka,以用於多個下游應用程式。但是,NiFi應該成為獲取資料的閘道器,因為它支援多種協議,並且可以在相同的簡單拖放介面中滿足資料需求,從而使ROI很高。  

  • 使用NiFi將資料安全地移動到多個位置,尤其是採用多雲策略時。

  • Kafka Connect可以回答一些問題,但是當您在移動資料時需要複雜的過濾、路由、擴充和轉換時,這不是通用的解決方案。

  • NiFi還基於可擴充套件框架構建,該框架為使用者提供了簡便的方法來擴充套件NiFi的功能並快速構建非常自定義的資料移動流。

大規模公開用於實時資料收集的REST API的最佳方法是什麼?

我們的客戶使用NiFi公開REST API,供外部來源將資料傳送到目的地。最常見的協議是HTTP。

  • 如果您的目標是獲取資料,則可以在NIFi中使用ListenHTTP處理器,讓它偵聽HTTP請求的給定埠,然後可以向其傳送任何資料。

  • 如果要使用NiFi提供Web服務,請檢視HandleHTTPRequest和HandleHTTPResponse處理器。通過使用兩個處理器的組合,您將通過HTTP接收來自外部客戶端的請求。您將能夠對請求中的資料進行處理,並將自定義答案/結果傳送回客戶端。例如,您可以使用NiFi通過HTTP訪問外部系統,例如FTP伺服器。您將使用兩個處理器並通過HTTP發出請求。當您在NIFi中收到查詢時,NiFi會針對FTP伺服器進行查詢以獲取檔案,然後將檔案傳送回客戶端。

  • 使用NiFi,所有這些獨特的請求都可以很好地擴充套件。在這種用例中,NiFi將根據需求進行水平擴充套件,並在NiFi例項的前面設定負載均衡器,以平衡叢集中NiFi節點之間的負載。 

是否可以根據使用者的訪問許可權和安全策略阻止或共享NiFi資料流?

NiFi提供了非常細粒度的多租戶和策略模型。設定正確的策略以在多租戶環境中提供NiFi很容易。您可以輕鬆地在NiFi中使用不同的策略集定義多個流程組,因此您有一個專用於處理用例1的團隊A的流程組,以及一個專用於用例2的團隊B的流程組。考慮:

  • NiFi確保不同的團隊不應該訪問其他流程組。使用Apache Ranger或NiFi中的內部策略可以輕鬆進行設定。您可以讓多個團隊在同一個NiFi環境中處理大量用例。  

  • 在NiFi叢集中,所有資源均由所有現有流共享,並且沒有資源隔離。例如,NiFi無法為用例#1分配60%的資源,而為用例#2分配40%的資源。對於關鍵用例,大多數客戶將擁有專用的NiFi群集,以確保滿足SLA。NiFi提供了監視功能,以確保在群集內正確使用資源並在群集過小時發出警報。   

  • 在2021年,Cloudera將釋出新解決方案,使客戶能夠在大小合適的專用NiFi群集中執行NiFi流,並在自動縮放(上下)的k8上執行。此選項可確保每個用例在一段時間內使用所需的內容,而不會影響其他用例。

NiFi是否可以很好地替代ETL和批處理?

對於某些用例,NiFi當然可以代替ETL,也可以用於批處理。但是,應該考慮用例所需的處理/轉換型別。在NiFi中,流檔案是描述流過事件、物件和資料的方式。雖然您可以在NiFi中為每個Flow File執行任何轉換,但您可能不想使用NiFi將Flow File基於公共列連線在一起或執行某些型別的視窗聚合。在這種情況下,Cloudera建議使用其他解決方案。

那麼有什麼建議呢?

  • 在流使用情況下,最好的選擇是使用NiFi中的記錄處理器將記錄傳送到一個或多個Kafka主題。然後,基於我們對Eventador的收購,您可以讓Flink使用Continuous SQL對資料進行所有想要的處理(加入流或執行視窗操作)。  

  • 在批處理用例中,您會將NiFi視為ELT而不是ETL(E =提取,T =轉換,L =載入)。NiFi會捕獲各種資料集,對每個資料集進行所需的轉換(模式驗證、格式轉換、資料清理等),然後將資料集傳送到由Hive支援的資料倉庫中。將資料傳送到那裡後,NiFi可能會觸發Hive查詢以執行聯合操作。

我希望這些答案有助於您確定如何使用NiFi以及它可以為您的業務需求帶來的好處的資料旅程。我們將通過問答環節主持更多現場演示,以涵蓋特定主題,例如監控NiFi流量以及如何使用NiFi自動化流量部署。實際上,我們在NiFi上有很多問題值得他們參加! 

作者:Pierre Villard

原文連結:https://blog.cloudera.com/top-5-questions-about-apache-nifi/




本文分享自微信公眾號 - 大資料雜貨鋪(bigdataGrocery)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。