【NiFi系列】1-基本介紹

1.1 背景介紹

2006年NiFi由美國國家安全局(NSA)的Joe Witt創建。2015年7月20日,Apache 基金會宣佈Apache NiFi順利孵化成爲Apache的頂級項目之一。NiFi初始的項目名稱是Niagarafiles,當NiFi項目開源之後,一些早先在NSA的開發者們創立了初創公司Onyara,Onyara隨之繼續NiFi項目的開發並提供相關的支持。Hortonworks公司收購了Onyara並將其開發者整合到自己的團隊中,形成HDF(Hortonworks Data Flow)平臺。2018年Cloudera與Hortonworks合併後,新的CDH整合HDF,改名爲Cloudera Data Flow(CDF),並且在最新的CDH6.2中直接打包,而Apache NiFi就是CFM的核心組件。

1.2 什麼是Apache NiFi

Apache NiFi 是一個易於使用、功能強大而且可靠的數據處理和分發系統。Apache NiFi 是爲數據流設計,它支持高度可配置的指示圖的數據路由、轉換和系統中介邏輯,支持從多種數據源動態拉取數據。簡單地說,NiFi是爲自動化系統之間的數據流而生。 這裏的數據流表示系統之間的自動化和受管理的信息流。 基於WEB圖形界面,通過拖拽、連接、配置完成基於流程的編程,實現數據採集、處理等功能。

傳統的數據流解決方案往往會遇到以下的挑戰:

  • 系統錯誤

    包括網絡錯誤、硬盤錯誤、軟件崩潰,甚至是人爲錯誤,造成了數據流處理的不穩定性。

  • 數據訪問超過處理消費的能力

    當數據處理模塊有某一瓶頸時,往往不能夠及時處理到達的數據。

  • 異常數據處理

    不可避免會出現數據太大,數據碎片,數據傳輸太慢,數據損壞,問題數據以及及數據格式錯誤。

  • 業務快速演進

    快速處理業務的調整,快速啓用新flow以及改造已有的flow。

  • 多系統升級不同步引入的前後兼容

    原有系統的協議和數據格式,會伴隨系統的升級有一定的調整,同時單個系統的升級會影響周邊系統。數據流可以把多個大型分佈式系統串邊在一起,這些系統可以是鬆散地,甚至設計之初就沒考慮未來集成。

  • 合規與安全

    法律法規的變更,規章制度的變動,以及政策調整,業務條款的變更。系統和系統之間,系統和用戶接口之間要安全,可信和權責分明。

  • 持續改進生產系統

    在實驗室環境很難複製生產環境。從生產系統複製數據到實驗室環境或者在實驗室環境重現生產系統的問題?

多年來,數據流(dataflow)一直是架構中的痛點之一。而現在有越來越多事物的興起讓企業開始重視數據流,包括:面向服務的體系結構(SOA),API,物聯網IOT和大數據。此外,合規性,隱私性和安全性所需的嚴格程度也在不斷提高。對於這些新鮮事物或概念,數據流的需求大致相同,主要區別在於複雜性,適應業務變化的速度,以及大規模邊緣用例。NiFi旨在幫助解決這些現代數據流挑戰。

1.3 NiFi的核心概念

NiFi的基本設計理念是基於數據流的編程 Flow-Based Programming(FBP)。應用是由處理器黑盒、連接器組成的網絡。數據進入一個節點,由該節點對數據進行處理,根據不同的處理結果將數據路由到後續的其他節點進行處理。這是NiFi的流程比較容易可視化的一個原因。以下是NiFi的概念,以及和FBP相對應內容。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FVJEl2oh-1583071653333)(img/image-20200219133506886.png)]

參照上述表格,簡單來講

  • FlowFile 是在各個節點間流動的數據;

  • FlowFile Processor 是數據的處理模塊;

  • Connection是各個處理模塊間的一個隊列;

  • Flow Controllers是複雜流程的調度;

  • Process Group封裝流程的層次關係。

這種設計模式和seda架構類似,帶來了很多好處,幫助NiFi成爲構建強大的可擴展數據流高效的平臺,包括:

  • 適用於可視化的創建和管理Processor。
  • 本質上是異步的,即使在處理和流量波動時也允許非常高的吞吐和自然緩衝。
  • 提供高併發的模型,讓開發人員不用擔心如何實現複雜的併發。
  • 幫助高度聚合和鬆散耦合組件的開發,讓這些組件可以在其他環境複用,並幫助單元測試。
  • 資源受限的connection使得背壓和壓力釋放等關鍵功能非常自然和直觀。
  • 錯誤處理做的非常好,而不是粗粒度的一把抓。
  • 數據進入和退出系統以及如何流過的點很容易理解和輕鬆跟蹤。

1.4 NiFi架構


NiFi是基於Java的,NiFi的核心部件在JVM裏的位置如上圖所示:

  1. Web Server

    承載NiFi基於HTTP的命令和控制API。

  2. Flow Controller

    是NiFi執行具體操作的大腦,負責從線程資源池中給Processor分配可執行的線程,以及其他資源管理調度的工作。

  3. Extensions

    在其他文檔中會專門介紹各種類型的NiFi擴展,重點是這些擴展也是在JVM中運行的。

  4. FlowFile Repository

    負責保存在目前活動流中FlowFile的狀態,其功能實現是可插拔的。默認的方式是通過一個存儲在指定磁盤分區的持久預寫日誌(WAL),來實現此功能。

  5. Content Repository

    負責保存在目前活動流中FlowFile的實際字節內容,其功能實現是可插拔的。默認的方式是一種相當簡單的機制,即存儲內容數據在文件系統中。多個存儲路徑可以被指定,因此可以將不同的物理路徑進行結合,從而避免達到單個物理分區的存儲上限。

  6. Provenance Repository

    負責保存所有跟蹤事件數據,同樣此功能是可插拔的,並且默認可以在一個或多個物理分區上進行存儲,在每個路徑下的事件數據都被索引,並且可被查詢。

當然NiFi也支持以集羣方式部署
在這裏插入圖片描述
從NiFi 1.0版本開始,NiFi採用Zero-Master集羣模式。NiFi集羣中的每個節點都對數據執行相同的任務,但每個節點都運行在不同的數據集上。Apache ZooKeeper選擇其中一個節點作爲集羣協調器,故障轉移由ZooKeeper自動處理。所有集羣節點都會向集羣協調器報告心跳和狀態信息。集羣協調器負責斷開和連接節點。作爲DataFlow管理器,您可以通過集羣中任何節點的UI與NiFi集羣進行交互。您所做的任何更改都會複製到集羣中的所有節點,從而允許多個入口點進入集羣。

1.5 NiFi的性能期望和特性

NiFi旨在充分利用底層服務器的能力,最大化使用CPU和磁盤這種資源特別有優勢。更多其他信息可以參考官網文檔中的“Administration Guide”。

1.5.1 For IO

期望的吞吐或時延與實際情況可能會存在很大的差異,這取決於系統的配置方式。鑑於大多數主要NiFi子系統都是可插拔式的,性能取決於部署實施的方式。對於通用需求建議使用開箱即用的默認實現。使用本地磁盤對於所有子系統都可以持久化保存數據,從而保證交付。保守一點假設一臺典型的服務器上的一般磁盤或者RAID卷大約每秒50MB的讀寫速率。則NiFi中的較大類型的數據流可以達到每秒100MB或者更高的吞吐。這是因爲添加到NiFi的每個物理分區和content repository會呈線性增長。這將在FlowFile repository和provenance repository的某個點上出現瓶頸。我們計劃在搭建時提供一個基準測試和性能測試模板,允許用戶輕鬆測試他們的系統並確定瓶頸在哪裏。此模板還應使系統管理員可以輕鬆進行更改並驗證其影響。

1.5.2 For CPU

Flow Controller充當引擎,指示特定Processor何時被賦予執行線程。Processor被設計爲一旦執行任務完成立即返回線程。Flow Controller有一個配置項,用以表明它維護的各個線程池的可用線程。理想的線程數取決於服務器的CPU核的數量,系統是否正在運行其他服務,以及flow中的處理性質。對於典型的IO很重的flow,使許多線程可用是合理的。

1.5.3 For RAM

NiFi運行在JVM中,因此受限於JVM提供的內存空間。JVM的GC對於限制總實際堆大小以及優化應用程序運行時間是一個非常重要的因素。定期閱讀相同內容時,NiFi作業可能是I/O密集型的。配置足夠大的磁盤以優化性能。

1.6 NiFi的關鍵特性

1.6.1 Flow Management

  1. 保證交付

    NiFi的核心理念是即使在非常大的規模下,保證交付也是必須的。這是通過有效使用專用的持久性預寫日誌(WAL)和content repository來實現的。它們的設計可以實現非常高的事務處理,高效的負載分散,寫入時複製以及發揮傳統磁盤讀/寫的優勢。

  2. 基於背壓的數據緩衝和背壓釋放

    NiFi支持所有排隊數據的緩衝以及當這些隊列達到指定限制時提供背壓的能力,或者指定過期時間。

  3. 優先排隊

    NiFi允許設置一個或多個優先級方案,用於數據如何在隊列中被檢索。默認情況下,是先進先出的處理策略。也可以設置成後進先出、最大先出,或者其他的處理策略。可以爲每一個connection配置隊列的優先級。

  4. 流式QoS保障

    經常有一些數據是非常重要的不能夠丟失,以及需要進行低延遲處理的。NiFi能夠爲這些數據流提供QoS保障服務。

1.6.2 易於使用

  1. 可視化命令與控制

    數據流的處理有時非常複雜,因此提供一個可視化的數據流展現與編輯功能,使得用戶在編輯和處理數據流時更加直觀,從而提升使用效率。當用戶在數據流上做出修改時,這個更改將立即在實際中產生作用。並且,用戶在進行局部修改時,不需要停止整個流處理過程。

  2. 流程模板

    由於數據流是高度面向模式的,並且在解決一個問題時會有多種不同的方式,能夠共享一些好的通用處理模板將對用戶會有很大的幫助。模板功能允許用戶構建、發佈設計模板,並共享給其他人。

  3. 數據跟蹤

    NiFi自動記錄、索引對於數據流的每個操作日誌,並可以把可用的跟蹤數據作爲對象在系統中傳輸。這些信息能夠在系統故障診斷、優化等其他場景中發揮重要作用。如下圖所示爲一個數據流的數據跟蹤記錄。

  4. 記錄/恢復細粒度的歷史數據

    NiFi的content repository被設計成歷史滾動緩衝區的角色。數據僅僅在超時或者空間不足時被從content repository中刪除。此項功能與數據跟蹤功能一起,可以提供一項非常有用的基礎功能,即用戶能夠對中間過程的內容進行下載和回放。

1.6.3 安全

  1. 系統間

    NiFi可以通過雙向SSL進行數據加密。並且可以允許在發送與接收端使用共享祕鑰,及其他機制對數據流進行加密與解密。

  2. 用戶與系統間

    NiFi允許雙向SSL認證,並且提供可插入式授權模式,因此可以控制用戶的登錄權限(例如:只讀權限、數據流管理者、系統管理員)。如果用戶在flow中輸入敏感信息(如密碼),則會立即加密服務器端,即使是加密形式也不會再暴露在客戶端。

  3. 多租戶授權

    指定數據流的權限適用於每個組件,允許管理員用戶具有細粒度的訪問控制。這意味着每個NiFi集羣都能夠處理一個或多個組織的要求。與隔離方式相比,多租戶授權支持數據流管理的自助服務模型,允許每個團隊或組織在完全瞭解流的其餘部分的情況下管理流,而無法訪問流。

1.6.4 可擴展架構

  1. 擴展

    NiFi的核心是爲擴展而構建的,因此它是一個數據流進程可以以可預測和可重複的方式執行和交互的平臺。 擴展點包括:處理器,控制器服務,報告任務,優先級排序器和用戶界面。

  2. 類裝載器隔離

    對於任何基於組件的系統,隨着規模的擴張,組件之間的依賴會越來越錯綜複雜。爲了解決這個問題,NiFi通過提供自定義類裝載器模型,來確保每個擴展組件之間的約束關係被限制在非常有限的程度。因此,在創建擴展組件時,就不用再過多關注其是否會與其他組件產生衝突。

  3. Site-to-Site通信協議

    NiFi實例之間的首選通信協議是NiFi Site-to-Site(S2S)協議。S2S可以輕鬆,高效,安全地將數據從一個NiFi實例傳輸到另一個實例。NiFi客戶端庫可以輕鬆構建並捆綁到其他應用程序或設備中,以通過S2S與NiFi進行通信。S2S中支持基於socket的協議和HTTP(S)協議作爲底層傳輸協議,使得可以將代理服務器嵌入到S2S通信中。

1.6.5 靈活的縮放模型

  1. 橫向擴展(集羣)

    如上所述,NiFi可以通過將許多節點聚集在一起以集羣的方式實現橫向擴展。如果單節點被配置爲每秒處理數百MB的數據,則集羣方式可以達到每秒處理GB級別。這就帶來了NiFi與其獲取數據的系統之間的負載均衡和故障轉移的挑戰。使用基於異步排隊的協議(如消息服務,Kafka等)可以提供幫助。使用NiFi的“site-to-site”功能也非常有效,因爲它是一種協議,允許NiFi和客戶端(包括另一個NiFi集羣)相互通信,共享有關加載的信息,以及交換特定授權的數據端口。

  2. 放大和縮小

    NiFi還可以非常靈活地放大和縮小。從NiFi框架的角度來看,如果要增加吞吐,可以在配置時增加“Scheduling”選項卡下processor的併發任務數。這允許更多進程同時執行,從而提供更高的吞吐。 另一方面,您可以完美地將NiFi縮小到適合在邊緣設備上運行,因爲硬件資源有限,所需的佔用空間很小。要專門解決第一英里數據收集挑戰和邊緣用例,您可以使用MiNiFi,參考:

    https://cwiki.apache.org/confluence/display/NIFI/MiNiFi

    也是Cloudera Data Flow(CDF)中的另一個核心套件Cloudera Edge Management(CEM),參考《0603-Cloudera Flow Management和Cloudera Edge Management正式發佈》。

因爲NiFi可以對來自多種數據源的流數據進行處理,Cloudera認爲CFM非常適合用於物聯網(IoT)的數據處理。NiFi並非只能用於物聯網,實際上,它可以用於所有種類的實時數據處理,比如預測分析、欺詐檢測、大數據注入、資源評估等等。NiFi項目自身提供了200多個數據處理器(Data Processors),這其中包括了數據的編碼、加密、壓縮、轉換、從數據流創建Hadoop的序列文件、同AWS交互、發送消息到Kafka、從Twitter上獲取消息,以及其它等等。你可以在拖放風格的可視化界面上來配置這些數據處理器,把它們鏈接到一起,並在它們之間使用背壓機制來進行流控。NiFi還提供了內置的自動擴展、請求複製、負載均衡和故障切換機制。

參考文檔:

https://www.cloudera.com/downloads/cdf.html
https://docs.hortonworks.com/HDPDocuments/CFM/CFM-1.0.0/release-notes/content/whats-new.html
https://nifi.apache.org/docs.html
https://blog.csdn.net/hopeatme/article/details/50815448 -《apache Nifi 概述》
https://mp.weixin.qq.com/s?__biz=MzIyNjE2Nzk2Mw==&mid=2649622971&idx=1&sn=d8fb75763fff0c81a47f50db334b7593&mpshare=1&scene=1&srcid=0505Z3OEvkBzX2l10PrkdxI5&key=df948c116dbfc5612e8c214b2f12a677bf7c154436366b687494918f61d5665106cddbf99d0ae55f40fc5655a81ed0e0530808c40b84eb14deb601d4680ccb4257dc94c202d9d435b93c3c67a48e721e&ascene=1&uin=MzEwMTQyODc1&devicetype=Windows+10&version=6206081a&lang=zh_CN&pass_ticket=XATIdbNH9MAsb2YtyHyRCVwB25QO1SUOWdoBbMxTrRZXIibv1G3IIEb5vJZmVnkL 《大數據平臺全能數據整合工具——NiFi》
https://mp.weixin.qq.com/s?__biz=MzA5Njc0NTkwNA==&mid=2651472302&idx=1&sn=be80c76692dc1e4fb05f2621f6a6251a&chksm=8b558171bc220867813665aedafc354e9192299ae2811cd46878fbb9126b77d94efe85893aa7&mpshare=1&scene=1&srcid=0505uIavcOT2sWqcqphD8fEV&key=46ff2b520d784298bc7d98d144eae324e24a68a4ee9ab11b999c0aaa9339ca229ad75c547e714ce748eb3a37b8f4a28a821b3bf3a077b08fec65aabb8a558b81765aa9f1d12867b89e7ab0b5d7711ced&ascene=1&uin=MzEwMTQyODc1&devicetype=Windows+10&version=6206081a&lang=zh_CN&pass_ticket=XATIdbNH9MAsb2YtyHyRCVwB25QO1SUOWdoBbMxTrRZXIibv1G3IIEb5vJZmVnkL -《一文了解面向流程的大數據處理框架NiFi》
https://blog.csdn.net/zhangshk_/article/details/78846203
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章