什么是nifi?
nifi是用來處理數據集成場景的數據分發,BS結構的圖形化控制工具,具有對大數據的處理和分發能力,nifi可以處理各種各樣的數據源和不同格式的數據。可以從一個源中獲取數據,對其進行轉換,然后將其推送到另一個目標存儲地。
nifi解決的問題
1、高可用(HA)
2、高性能高並發
3、方便錯誤糾察
通過Processors-boxes再運用各個連接器-箭頭形成的流程。讓nifi提供了一個基於流的編程體驗,比較直觀,相比於這些操作,如果使用代碼來操作實現這些功能的話,可能需要上百行代碼才能解決此問題。
4、快速響應
nifi的設計實現具有扎實的理論基礎,它是分階段的事件驅動架構,它旨在結合事件驅動和多線程模式兩者的有點,從而做到易擴展,解耦合,高並發。各個stage之間的通信由event來傳遞,event的處理由stage的線程池異步處理。
5、兼容各種數據格式
6、安全性高
7、方便遷移
nifi核心概念
FlowFile:表示通過系統移動的每個對象,包含數據流的基本屬性(工作流文件)
FlowFile Processor:負責實際對數據流執行工作(處理器)
Connection:負責不同處理器之間的連接,是數據的有界緩沖區(連接線)
Flow Controller:管理進程使用的線程及其分配(流量控制器)
Process Group:進程組是一組特定的進程及其連接,允許組合其他組件創建新組件(過程組)
NiFi架構:
Nifi架構
nifi是在主機操作系統上的JVM內執行。JVM上的Nifi主要組件如下:
1、網絡服務器(Web Server)
web服務器的目的是托管nifi的基於HTTP的命令和控制API
2、流控制器(Flow Controller)
流控制器是操作的大腦。它提供用於擴展程序運行的線程,並管理擴展程序接收資源以執行的時間表。
3、擴展(Extensions)
有各種類型的nifi擴展在其他文檔中描述。這里的關鍵是擴展在JVM中運行和執行。
4、FlowFile存儲庫(FlowFile Repository)
FlowFile存儲庫是NiFi跟蹤目前在流程中活動的給定FlowFile的知識狀態。
存儲庫的實現是可插拔的。默認方法是位於磁盤分區上的持久寫入前端日志。
5、內容存儲庫(Content Repository)
Content Repository是給定FlowFile的實際內容字節。存儲庫的實現是可插拔的。
默認方法是一個相當簡單的機制,它將數據塊存儲在文件系統中。
可以指定多個文件系統存儲位置,以便獲得不同的物理分區,以減少任何單個卷上的爭用。
6、源頭存儲庫(Provenance Repository)
Provenance Repository是存儲所有事件數據的地方。
Provenance Repository的實現是可熱插拔的,默認實現是使用一個或多個物理磁盤卷。
在每個位置內的事件數據都是被索引並可搜索的。
NiFi的特性及性能預期
nifi的設計目的是充分利用其運行的底層主機系統的能力。這種資源的最大化在CPU和磁盤方面尤其明顯。
對於IO
對於CPU
對於RAM
Nifi功能的高級概述
流量管理
保證交貨:NiFi的核心理念是,即使在非常高的規模,必須保證交付。
數據緩沖背壓和壓力釋放:NiFi支持對所有排隊的數據進行緩沖,以及當隊列達到指定限制時提供背壓的能力,或者在數據達到指定年齡時使其老化(其值已經消失)的能力。
優先排隊:NiFi允許設置一個或多個優先級排序方案來了解如何從隊列中檢索數據。
默認值是最早的,但有時候數據應該被拉到最新,最大的第一個或其他一些自定義方案。
流特定Qos(延遲 vs 吞吐量, 丟失容限等)
數據流的一些點數據非常關鍵,並且是不容忍的。
還有一段時間,它必須在幾秒鍾內被處理和交付成為任何價值。
NiFi使得細粒度流特定配置這些問題。
使用方便
視覺指揮與控制
數據流可能變得相當復雜。能夠可視化這些流程並在視覺上表達它們可以大大減少復雜性並確定需要簡化的領域。
NiFi不僅可以直觀地建立數據流,而且可以實時地實現。而不是設計和部署它更像是成型工具。
如果對更改的數據流進行更改立即生效。
更改是細粒度的,並且與受影響的組件隔離。不需要為了進行一些具體的修改而停止整個流程。
流模板
數據流往往是高度模式化的,而通常有許多不同的方式來解決問題。
模板允許主題專家構建和發布他們的流程設計,並為其他人創造和合作。
資料來源
Nifi自動記錄,索引並提供可用的來源數據,因為對象即使在扇入,扇出,轉換等過程中也可以流經系統。
該信息在支持合規性,故障排除,優化和其他場景方面變得非常重要。
恢復/記錄細粒歷史的滾動緩沖區
NiFi的內容存儲庫旨在作為歷史的滾動緩沖區。只有當數據從內容存儲庫中老化或者需要空間時才會被刪除。
這與數據來源功能相結合,使得在對象的生命周期中甚至跨越世代的特定點上實現點擊內容,內容下載和重放非常有用的基礎。
安全
可擴展架構
靈活的縮放模型
可擴展架構
延期
NiFi的核心是擴展的核心,因此它是數據流處理可以以可預測和可重復的方式執行和交互的平台。
擴展點包括:處理器,控制器服務,報告任務,優先級和客戶用戶界面。
分類器隔離
對於任何基於組件的系統,可能會迅速發生依賴問題。
NiFi通過提供自定義類加載器模型來解決這個問題,確保每個擴展捆綁包都暴露在非常有限的依賴關系中。
因此,可以構建擴展,而不用擔心它們是否可能與另一個擴展沖突。這些擴展束的概念稱為NiFi Archives, 在開發人員指南中有更詳細的討論。
站點到站點通信協議
NiFi實例之間的首選通信協議是NiFi站點到站點(S2S)協議。
S2S可以方便,高效,安全地將數據從一個NiFi實例傳輸到另一個。
NiFi客戶端庫可以輕松構建並捆綁到其他應用程序或設備中,以通過S2S與NiFi通信。
S2S中都支持基於套接字的協議和HTTP(S)協議作為底層傳輸協議,從而可以將代理服務器嵌入到S2S通信中。
靈活的縮放模型
橫向擴展(聚類)
NiFi旨在通過如上所述將多個節點聚類在一起使用來展開。
如果單個節點被配置並配置為每秒處理數百MB,則可以配置適度的集群來處理每秒的GB數。
這將帶來NiFi與獲取數據的系統之間的負載平衡和故障轉移的挑戰。可以使用基於異步的消息隊列, 如Kafka來解決問題。
使用NiFi的站點到站點功能也非常有效,因為它是允許NiFi和客戶端(包括另一個NiFi集群)相互通話,共享關於加載的信息以及在特定授權端口上交換數據的協議。
-
放大與縮小
- NiFi也被設計成以非常靈活的方式進行放大和縮小。
- 在從NiFi框架的角度增加吞吐量方面,可以在配置時增加“計划”選項卡下的處理器上的並發任務數量。這允許更多的進程同時執行,提供更大的吞吐量。
- 可以將NiFi完美地縮放到適合於在硬件資源有限的邊緣設備上運行,因為需要較小的占用空間。