1. 程式人生 > >nifi初識---核心概念和整體架構

nifi初識---核心概念和整體架構

NIFI的核心概念:

nifi設計理念是基於流的程式設計,下面是nifi的一些概念:
NiFi Term FBP Term Description
FlowFile 資訊流 每一個數據流在系統裡面流動,幷包含著key/value形式的attribute,以及不同大小的content
FlowFile Processor 黑盒 資料流處理器是nifi中真正處理工作的,譬如,整合,轉換,調節系統中的流轉的資料流,資料流處理器可以接收上游的flow的attribute,以及content。資料流處理器可以處理0至多個流,並給出相應的反饋,比如提交或者回滾
Connection 有界緩衝區 不同處理器之間的連線紐帶,他是一個訊息佇列,可以接收不同的處理器,並與之以不同的流頻率進行互動,這些佇列可以動態分配優先順序,並且可以有負載的上限,從而實現反壓,
Flow Controller 排程 流量控制器負責管理有多少處理器的連線和管理執行緒以及分配資源,他作為不同處理器之間的資料流交換代理
Process Group 子網 處理器組是一些連在一起的處理器的組合,他可以通過inputport得到資料,也可以通過outputport傳送資料,我們可以使用不同的處理器組,構造更多的組合

這種設計模式和seda架構類似,這種架構提供了許多有益的結果,幫助NiFi成為構建強大的可擴充套件資料流有效的平臺。其中一些好處包括:

非常適合觀察和管理建立的有向圖處理器。

本質上是非同步的,即使在處理和流量波動的情況下,也允許非常高的吞吐量和自然緩衝

提供高度併發的模型,而不需要開發人員擔心典型的併發性複雜性

促進內聚和鬆耦合的元件的發展,然後可以在其他情況下重用,並促進可測試單位

資源受限的連線使得諸如背壓壓力釋放的關鍵功能非常自然和直觀

錯誤處理的很好,而不是粗粒度的抓包

資料進入和離開系統的點以及資料的流轉都很好理解和容易跟蹤

NIFI的架構:

這裡寫圖片描述
NiFi在主機作業系統上的JVM中執行。JVM上NiFi的主要元件如下:

網路伺服器
Web伺服器的目的是託管NiFi的基於HTTP的命令和控制API。

流量控制器
流量控制器是操作的大腦。它提供執行緒來執行擴充套件,並管理擴充套件接收資源執行的時間表。

擴充套件
其他文件中描述了各種型別的NiFi擴充套件。這裡的關鍵是擴充套件在JVM中執行和執行。

FlowFile儲存庫
FlowFile儲存庫是NiFi保持跟蹤當前在流中活動的給定FlowFile的狀態的地方。儲存庫的實現是可插入的。預設方法是位於指定磁碟分割槽上的永續性預寫日誌。

內容庫
內容儲存庫是給定FlowFile的實際內容位元組所在的位置。儲存庫的實現是可插入的。預設的方法是一個相當簡單的機制,它將資料塊儲存在檔案系統中。可以指定多個檔案系統儲存位置,以便使用不同的物理分割槽來減少任何單個捲上的爭用。

來源庫
Provenance Repository是所有起源事件資料儲存的地方。儲存庫結構是可插入的,預設實現是使用一個或多個物理磁碟卷。在每個位置內,事件資料被索引和搜尋。

NiFi也能夠在群集內執行

這裡寫圖片描述

從NiFi 1.0版本開始,採用了Zero-Master聚類範例。NiFi叢集中的每個節點在資料上執行相同的任務,但是每個節點都在不同的資料集上執行。Apache ZooKeeper選擇一個節點作為叢集協調器,故障轉移由ZooKeeper自動處理。所有群集節點都會向群集協調器報告心跳和狀態資訊,叢集協調器負責斷開和連線節點。
另外,每個叢集都有一個主節點,也由ZooKeeper選出。作為DataFlow管理器,您可以通過任何節點的使用者介面(UI)與NiFi群集進行互動。您所做的任何更改都會複製到群集中的所有節點,從而允許多個入口點。

NiFi的效能期望和特點

NiFi旨在充分利用其所執行的底層主機系統的功能。這種資源的最大化在CPU和磁碟方面尤其強大。

對於IO
人們期望看到的吞吐量或等待時間差異很大,這取決於系統的配置。考慮到大多數主要的NiFi子系統都有可插拔的方法,效能取決於實施。但是,對於具體和廣泛適用的內容,請考慮開箱即用的預設實現。這些都是持久的保證交付,並使用本地磁碟。所以要保守,在典型的伺服器中,假設在適當的磁碟或RAID捲上每秒讀取/寫入速率大約為50 MB。對於大量資料流,NiFi應該能夠高效地達到每秒100 MB或更多的吞吐量。這是因為對於新增到NiFi中的每個物理分割槽和內容儲存庫預計會有線性增長。這將在FlowFile儲存庫和源資料庫的某個時刻出現瓶頸。我們計劃提供基準測試和效能測試模板,以包含在構建中,使使用者可以輕鬆測試其系統並確定哪些地方存在瓶頸,哪些地方可能成為問題的一個因素。這個模板還應該使系統管理員很容易進行更改並驗證影響。

對於CPU
流控制器作為引擎指定特定處理器何時被執行的執行緒。處理器被編寫為線上程完成執行任務後立即返回執行緒。流控制器可以給定一個配置值,指示它維護的各個執行緒池的可用執行緒。理想的執行緒數量取決於主機系統資源的核心數量,系統是否在執行其他服務以及流程中處理的性質。對於典型的IO流量來說,使許多執行緒可用是合理的。

對於RAM
NiFi存在於JVM中,因此僅限於JVM提供的記憶體空間。JVM垃圾回收成為限制總的實際堆大小以及優化應用程式執行時間的一個非常重要的因素。定期閱讀相同的內容時,NiFi作業可能是I / O密集型的。配置足夠大的磁碟以優化效能。

關鍵NiFi特性的高層次概述

流量管理

保證交付

NiFi的核心理念是,即使在非常高的規模下,保證交付是必須的。這是通過有效地使用專門構建的持久預寫日誌和內容儲存庫來實現的。它們一起被設計成允許非常高的事務處理速率,有效的負載分散,寫入時拷貝以及發揮傳統磁碟讀/寫的優點。

資料緩衝寫出/背壓和壓力釋放
NiFi支援所有排隊資料的緩衝以及當這些佇列達到指定限制時提供背壓的能力,或者指定過期時間。

優先排隊

NiFi允許設定一個或多個優先順序方案,以便如何從佇列中檢索資料。預設值是最早的,但是有些時候資料應該是最新的,最大的,或者是其他一些定製的。

流量特定的QoS(延遲v吞吐量,損失容限等)

使用方便

視覺化命令和控制
資料流可能變得相當複雜。能夠對這些流程進行視覺化並以視覺方式進行表達可以大大有助於降低這種複雜性並確定需要簡化的領域。NiFi不僅可以實現資料流的視覺化建立,而且可以實時進行。而不是設計和部署它更像是粘土成型。如果更改立即生效的資料流。更改細化並與受影響的元件隔離。您不需要停止整個流程或一組流程,只需進行一些特定的修改即可。

流程模板
資料流往往是高度模式化的,而通常有很多不同的方法來解決問題,這對分享這些最佳實踐非常有幫助。模板,允許主題專家建立和釋出他們的流程設計,並讓他人受益和協作。

資料來源
NiFi自動記錄,索引,並提供源資料作為物件流經系統,甚至跨扇入,扇出,轉換,等等。這些資訊在支援合規性,故障排除,優化和其他方面變得非常重要。

恢復/記錄細粒度歷史的滾動緩衝區
NiFi的內容庫被設計為充當歷史的滾動緩衝區。資料僅在內容儲存庫變老或需要空間時才被刪除。這與資料來源能力結合在一起,使得點選到內容,下載內容和重放都成為一個令人難以置信的有用的基礎,所有這些都在物件生命週期中的某個特定點上,甚至可以跨越幾代人。

安全

系統到系統
資料流只是安全的。資料流中的每個點都使用NiFi,通過使用帶有加密的協議(例如雙向SSL)提供安全的交換。另外,NiFi使得流程能夠加密和解密內容,並在傳送方/接收方的任一側使用共享金鑰或其他機制。

使用者到系統
NiFi支援雙向SSL身份驗證,並提供可插拔的授權,以便在特定級別(只讀,資料流管理器,管理員)可以正確控制使用者的訪問許可權。如果使用者將一個敏感屬性(如密碼)輸入到流中,則會立即將其加密到伺服器端,並且即使以加密形式也不會在客戶端再次公開。

多租戶授權
給定資料流的許可權級別適用於每個元件,允許管理員使用者具有良好的訪問控制級別。這意味著每個NiFi叢集都能夠處理一個或多個組織的要求。與孤立的拓撲相比,多租戶授權為資料流管理提供了一種自助服務模式,使每個團隊或組織都能夠全面瞭解剩下的流程,對於其他的沒有訪問許可權的地方。

可擴充套件的架構

延期
NiFi的核心是為擴充套件而構建,因此它是資料流程可以以可預測和可重複的方式執行和互動的平臺。擴充套件點包括:處理器,控制器服務,報告任務,優先順序和客戶使用者介面。

類載入器隔離
對於任何基於元件的系統,依賴性問題可能會很快發生。NiFi通過提供自定義的類載入器模型來解決這個問題,確保每個擴充套件bundle都暴露在一個非常有限的依賴關係集合中。因此,可以建立擴充套件,而不用擔心它們是否會與另一個擴充套件衝突。這些擴充套件包的概念被稱為NiFi檔案,在開發者指南中有更詳細的討論。

站點到站點通訊協議
NiFi例項之間的首選通訊協議是NiFi站點到站點(S2S)協議。S2S可以輕鬆,高效,安全地將資料從一個NiFi例項傳輸到另一個NiFi例項。NiFi客戶端庫可以輕鬆構建並捆綁到其他應用程式或裝置中,通過S2S與NiFi進行通訊。S2S支援基於套接字的協議和HTTP(S)協議作為底層的傳輸協議,使得在S2S通訊中嵌入代理伺服器成為可能。RPG就是一個典型的點到點通訊例項。

靈活的縮放模型

向外擴充套件(叢集)
如上所述,NiFi被設計為通過將多個節點聚集在一起來向外擴充套件。如果單個節點的配置和配置為每秒處理數百MB,則可以將適度的群集配置為每秒處理GB。然後,NiFi和從中獲取資料的系統之間的負載平衡和故障切換帶來了有趣的挑戰。使用基於非同步排隊的協議(如訊息服務,Kafka等)可以提供幫助。使用NiFi的站點到站點功能也非常有效,因為它是允許NiFi和客戶端(包括另一個NiFi叢集)相互通話,共享載入資訊和在特定授權埠之間交換資料的協議。

放大和縮小
NiFi也被設計為以非常靈活的方式放大和縮小。從NiFi架構的角度來看,增加吞吐量的方面,配置時可以在“排程”選項卡下增加處理器上的併發任務數量。這允許更多的程序同時執行,提供更大的吞吐量。另一方面,由於硬體資源有限,您可以完美地縮放NiFi以適合在需要小尺寸的邊緣裝置上執行.