##[NiFi]全能數(shù)據(jù)整合工具——NiFi

大數(shù)據(jù)平臺全能數(shù)據(jù)整合工具——NiFi http://mp.weixin.qq.com/s?src=3&timestamp=1489856435&ver=1&signature=tGL1W-id5hjNAKK1TIO056qHwawj9-N73ryXPzTR-8yENmd9F8pTc-ucHpvbZa9GGvlMVaWFpzeVsjTYKRYDq5OlXKayGSA7jjU1YfQTxOQxpbruIW5HRdfZMc8ZvnrTTdPE2p6ZGEkBPAT93loFDyGe1UrL4bZIwmtx0=

文章來源:中國聯(lián)通網(wǎng)研院網(wǎng)優(yōu)網(wǎng)管部——IT技術(shù)研究團(tuán)隊(duì)
作者:王振亞


    簡介:2006年NiFi由美國國家安全局(NSA)的Joe Witt創(chuàng)建。2015年7月20日,Apache基金會宣布ApacheNiFi順利孵化成為Apache的頂級項(xiàng)目之一。Apache NiFi的設(shè)計(jì)目標(biāo)是自動化管理系統(tǒng)間的數(shù)據(jù)流,其基于工作流式的設(shè)計(jì)理念具有很強(qiáng)的交互性,非常強(qiáng)大、易用。本文簡要介紹NiFi的相關(guān)特性,以及常見的應(yīng)用場景,為系統(tǒng)間或者系統(tǒng)內(nèi)的數(shù)據(jù)流管理提供一個更有力的“隊(duì)友”。

Apache NiFi是什么?
在Apache NiFi官網(wǎng)上,是這么介紹NiFi的:“一個易用、強(qiáng)大、可靠的數(shù)據(jù)處理與分發(fā)系統(tǒng)”。
簡單來說,NiFi用于自動化管理系統(tǒng)之間的數(shù)據(jù)流。企業(yè)中,往往有不止一個系統(tǒng),其中一些系統(tǒng)產(chǎn)生數(shù)據(jù),另外一些負(fù)責(zé)消費(fèi)數(shù)據(jù),而其中往往還有專門負(fù)責(zé)存儲數(shù)據(jù)的系統(tǒng)。如下圖所示,可以看到一個完整的從數(shù)據(jù)產(chǎn)生到存儲,再到被消費(fèi)的通用數(shù)據(jù)流。

傳統(tǒng)的數(shù)據(jù)流解決方案往往會遇到以下的挑戰(zhàn):
系統(tǒng)錯誤,包括網(wǎng)絡(luò)錯誤、硬盤錯誤、軟件崩潰,甚至是人為錯誤,造成了數(shù)據(jù)流處理的不穩(wěn)定性;

數(shù)據(jù)訪問超過處理能力,當(dāng)數(shù)據(jù)處理模塊有某一瓶頸時,往往不能夠及時處理到達(dá)的數(shù)據(jù);

系統(tǒng)之間的發(fā)展進(jìn)度不一致,從而經(jīng)常需要在生產(chǎn)系統(tǒng)中進(jìn)行新數(shù)據(jù)流的添加與已有數(shù)據(jù)流的修改,并且這些改動需要更加迅速的實(shí)現(xiàn);

安全性,系統(tǒng)與系統(tǒng)之間,系統(tǒng)與用戶之間的交互必須是安全、可信的;

    隨著大數(shù)據(jù)技術(shù)的發(fā)展,數(shù)據(jù)流處理技術(shù)比以往顯得更加重要,并對其在應(yīng)對復(fù)雜性與適配性方面提出了更高的要求。而NiFi就是為解決以上的問題而創(chuàng)建的。

NiFi的特性
** 1. 可視化命令與控制**
數(shù)據(jù)流的處理有時非常復(fù)雜,因此提供一個可視化的數(shù)據(jù)流展現(xiàn)與編輯功能,使得用戶在編輯和處理數(shù)據(jù)流時更加直觀,從而提升使用效率。當(dāng)用戶在數(shù)據(jù)流上做出修改時,這個更改將立即在實(shí)際中產(chǎn)生作用。并且,用戶在進(jìn)行局部修改時,不需要停止整個流處理過程。如下圖所示為一個數(shù)據(jù)流任務(wù),此數(shù)據(jù)流能夠?qū)TP上特定路徑下的文件實(shí)時同步到HDFS上,而此功能完全是通過拖拽圖標(biāo),并通過可視化配置實(shí)現(xiàn)的。

** 2. 保證交付**
NiFi的一個核心理念為:即使在非常高的規(guī)模與壓力環(huán)境下,保證數(shù)據(jù)的交付也是必須的。這是通過有效利用定制化的持續(xù)預(yù)寫日志和內(nèi)容倉庫技術(shù)做到的。它們一起被設(shè)計(jì),以支持非常高的交換速率,和高效的導(dǎo)入速度,并通過寫時拷貝技術(shù)而發(fā)揮傳統(tǒng)硬盤的優(yōu)勢。
** 3. 數(shù)據(jù)回壓**
NiFi提供所有隊(duì)列數(shù)據(jù)的緩存,并且在隊(duì)列達(dá)到指定限制或者超時的時候,能夠提供數(shù)據(jù)回壓。
** 4. 高擴(kuò)展性**
NiFi最初就被設(shè)計(jì)成可擴(kuò)展的,數(shù)據(jù)流處理程序能夠以可預(yù)測和可重復(fù)的模式執(zhí)行。
服務(wù)裝載模式:Processors、ControllerServices、Reporting Tasks、Prioritizers,以上服務(wù)可以單獨(dú)部署。
對于任何基于組件的系統(tǒng),隨著規(guī)模的擴(kuò)張,組件之間的依賴會越來越錯綜復(fù)雜。為了解決這個問題,NiFi通過提供自定義類裝載器模型,來確保每個擴(kuò)展組件之間的約束關(guān)系被限制在非常有限的程度。因此,在創(chuàng)建擴(kuò)展組件時,就不用再過多關(guān)注其是否會與其他組件產(chǎn)生沖突。
** 5. 優(yōu)先級隊(duì)列**
NiFi允許設(shè)置一個或多個優(yōu)先級方案,用于數(shù)據(jù)如何在隊(duì)列中被檢索。默認(rèn)情況下,是先進(jìn)先出的處理策略。也可以設(shè)置成后進(jìn)先出、最大先出,或者其他的處理策略??梢詾槊恳粋€connection配置隊(duì)列的優(yōu)先級。
** 6. 流式QoS保障**
經(jīng)常有一些數(shù)據(jù)是非常重要的不能夠丟失,以及需要進(jìn)行低延遲處理的。NiFi能夠?yàn)檫@些數(shù)據(jù)流提供QoS保障服務(wù)。
** 7. 數(shù)據(jù)跟蹤**
NiFi自動記錄、索引對于數(shù)據(jù)流的每個操作日志,并可以把可用的跟蹤數(shù)據(jù)作為對象在系統(tǒng)中傳輸。這些信息能夠在系統(tǒng)故障診斷、優(yōu)化等其他場景中發(fā)揮重要作用。如下圖所示為一個數(shù)據(jù)流的數(shù)據(jù)跟蹤記錄。
** 8. 記錄/恢復(fù)細(xì)粒度的歷史數(shù)據(jù)**
NiFi的內(nèi)容存儲庫被設(shè)計(jì)成歷史滾動緩沖區(qū)的角色。數(shù)據(jù)僅僅在超時或者空間不足時被從內(nèi)容存儲庫中刪除。此項(xiàng)功能與數(shù)據(jù)跟蹤功能一起,可以提供一項(xiàng)非常有用的基礎(chǔ)功能,即用戶能夠?qū)χ虚g過程的內(nèi)容進(jìn)行下載和回放。如下圖所示,為一個數(shù)據(jù)跟蹤記錄中提供的數(shù)據(jù)下載和預(yù)覽功能。
** 9. 流程模板**
由于數(shù)據(jù)流是高度面向模式的,并且在解決一個問題時會有多種不同的方式,能夠共享一些好的通用處理模板將對用戶會有很大的幫助。模板功能允許用戶構(gòu)建、發(fā)布設(shè)計(jì)模板,并共享給其他人。
** 10. 安全性**
系統(tǒng)間,NiFi可以通過雙向SSL進(jìn)行數(shù)據(jù)加密。并且可以允許在發(fā)送與接收端使用共享秘鑰,及其他機(jī)制對數(shù)據(jù)流進(jìn)行加密與解密。
用戶與系統(tǒng)間,NiFi允許雙向SSL鑒定,并且提供可插入授權(quán)模式,因此可以控制用戶的登錄權(quán)限(例如:只讀權(quán)限、數(shù)據(jù)流管理者、系統(tǒng)管理員)。
關(guān)鍵概念
NiFi的設(shè)計(jì)概念與流式編程模型(FlowBased Programming,F(xiàn)BP)的主要概念相似,以下是兩者相似概念的對應(yīng)關(guān)系表與注釋。對于理解NiFi的實(shí)現(xiàn)機(jī)制具有幫助。
NiFi術(shù)語

FBP術(shù)語

注釋

FlowFile

Information Packet

一個FlowFile代表每個被系統(tǒng)處理的數(shù)據(jù)對象,一個FlowFile由兩部分組成:屬性和內(nèi)容。內(nèi)容是數(shù)據(jù)本身,屬性是與數(shù)據(jù)相關(guān)的key-value的鍵值對,用于描述數(shù)據(jù)

FlowFile Processor

Black Box

Processor是NiFi的組件,可以用來創(chuàng)建、發(fā)送、接受、轉(zhuǎn)換、路由、割裂、合并、處理FlowFiles。在用戶建立數(shù)據(jù)流時,Processor是最重要的組成部分

Connection

Bounded Buffer

提供Processors之間的連接,用來定義Processors之間的執(zhí)行關(guān)系,并允許不同Processors之間以不同的速度進(jìn)行交互

Flow Controller

Scheduler

其負(fù)責(zé)維護(hù)Processors之間的關(guān)聯(lián)信息,并且管理所有進(jìn)程對于線程的使用、分配

Process Group

subnet

一個特定集合的Processors與它們之間的連接關(guān)系形成一個Process Group,其定義了從接受端口接受數(shù)據(jù)到通過發(fā)送端口發(fā)送數(shù)據(jù)之間,整個數(shù)據(jù)流的處理過程。并可以通過簡單組合其它的部件來創(chuàng)建新的部件

系統(tǒng)架構(gòu)-單機(jī)

如上圖所示,為NiFi架構(gòu)圖。NiFi在安裝有JVM的主機(jī)系統(tǒng)內(nèi)運(yùn)行。NiFi在JVM內(nèi)運(yùn)行的主要組件有:
Web Server,其主要目的是承載NiFi基于HTTP的命令和控制API;
Flow Controller,其是NiFi執(zhí)行具體操作的大腦,負(fù)責(zé)從線程資源池中給Processor分配可執(zhí)行的線程,以及其他資源管理調(diào)度的工作;
FlowFile Repository,其負(fù)責(zé)保存在目前活動流中FlowFile的活躍狀態(tài),其功能實(shí)現(xiàn)是可插拔的。默認(rèn)的方式是通過一個存儲在指定磁盤分區(qū)的持久預(yù)寫日志,來實(shí)現(xiàn)此功能。
Content Repository,其負(fù)責(zé)保存在目前活動流中FlowFile的實(shí)際字節(jié)內(nèi)容,其功能實(shí)現(xiàn)是可插拔的。默認(rèn)的方式是一種相當(dāng)簡單的機(jī)制,即存儲內(nèi)容數(shù)據(jù)在文件系統(tǒng)中。多個存儲路徑可以被指定,因此可以將不同的物理路徑進(jìn)行結(jié)合,從而避免達(dá)到單個物理分區(qū)的存儲上限。
Provenance Repository,其負(fù)責(zé)保存所有跟蹤事件數(shù)據(jù),同樣此功能是可插拔的,并且默認(rèn)可以在一個或多個物理分區(qū)上進(jìn)行存儲,在每個路徑下的事件數(shù)據(jù)都被索引,并且可被查詢。
系統(tǒng)架構(gòu)-集群
一個NiFi集群包括一個NiFi集群管理器(NCM)和由其控制的一個或多個NiFi節(jié)點(diǎn)(Node)組成。集群的設(shè)計(jì)遵從簡單的master/slave模型,其中NCM是master節(jié)點(diǎn),Node是slave節(jié)點(diǎn)。NCM的作用為監(jiān)視集群中的Nodes狀態(tài),并且發(fā)送請求給Nodes以修改或查看集群中的數(shù)據(jù)流。從根本上,NCM保持了整個集群的一致性。雖然模型是master/slave模型,如果主節(jié)點(diǎn)掛掉并且數(shù)據(jù)流仍然存在時,集群中的Nodes將繼續(xù)保持運(yùn)行狀態(tài)。失去NCM意味著新的節(jié)點(diǎn)將無法加入集群中,并且對于集群中數(shù)據(jù)流的修改將無法兌現(xiàn),直到NCM恢復(fù)正常。
全面的生態(tài)系統(tǒng)集成
如上圖所示,為NiFi所支持的各類平臺系統(tǒng),及數(shù)據(jù)接入方式,并能夠解析各種各樣的數(shù)據(jù)源,例如JSON、XML等。目前,NiFi已經(jīng)支持了130多種Processor,具有非常強(qiáng)大的數(shù)據(jù)流管理與處理功能。由于篇幅所限,這么多類Processor不可能在此一一介紹。請感興趣的童鞋到Apache NiFi官網(wǎng)進(jìn)行進(jìn)一步的了解與學(xué)習(xí)。
應(yīng)用實(shí)例
以上都是一些原理和概念,現(xiàn)在用NiFi來做一個實(shí)際的例子。在一個FTP服務(wù)器上,有一個名叫userlist.txt.gz的壓縮文件,里面是一個txt文件,文件的內(nèi)容為:

用NiFi要做的工作是:從FTP上獲取此文件,進(jìn)行解壓,將其中的M替換為“男”,F(xiàn)替換為“女”,并將處理后的txt文件put到HDFS的特定路徑下。為實(shí)現(xiàn)此功能,編輯的NiFi流如下:
由五個Processor實(shí)現(xiàn)了整個功能。依次Processor的類型及相應(yīng)設(shè)置如下:
1. GetFTP,負(fù)責(zé)從FTP的特定路徑下獲取文件,并創(chuàng)建FlowFile供后續(xù)處理,具體配置如下:
其中,F(xiàn)ile Filter Regex屬性可以配置要處理文件名的正則表達(dá)式,從而起到篩選文件的作用。
2. CompressContent,負(fù)責(zé)壓縮或解壓FlowFile的內(nèi)容,具體配置如下:
其中,Mode定義實(shí)現(xiàn)壓縮還是解壓,CompressionFormat定義壓縮或解壓格式。
3. ReplaceText,通過定義正則表達(dá)式,可對正則表達(dá)式匹配到的內(nèi)容進(jìn)行替換,從而起到對FlowFile內(nèi)容進(jìn)行修改的作用。此ReplaceText命名為“替換M為男”,即將FlowFile內(nèi)容中的M替換成文字“男”。具體配置如下:
其中,Search Value為定義的正則表達(dá)式,ReplacementValue為替換內(nèi)容。在此Processor,此為替換M為“男”。
4. ReplaceText,與上一個Processor是同一個類型,在此ReplaceText命名為“替換F為女”,即將FlowFile內(nèi)容中的F替換成文字“女”。
5. PutHDFS,負(fù)責(zé)將FlowFile以文件形式存放到HDFS的特性路徑下。,具體配置如下:
其中,HadoopConfiguration Resource為目標(biāo)HDFS的配置文件。Directory為HDFS上存放文件的目錄。
在經(jīng)過了上述5個Processor的數(shù)據(jù)流處理過程,之前在FTP上的userlist.txt.gz文件已經(jīng)被解壓、字符替換,并Put到HDFS的特定路徑下了。經(jīng)過處理后的文件如下:

NiFi也可以將FlowFile直接輸出到數(shù)據(jù)庫中,這樣一個簡單的ETL工作就完成了。
結(jié)束語
本文給大家介紹了一款易用、強(qiáng)大、可靠的數(shù)據(jù)處理與分發(fā)系統(tǒng)——Apache NiFi。目的是為了讓被系統(tǒng)間數(shù)據(jù)流管理任務(wù)所困擾的技術(shù)人員,有一個更加簡單、更加方便的選擇。從而有效減少對此項(xiàng)工作所耗費(fèi)的時間精力,并能夠大大提升系統(tǒng)間數(shù)據(jù)流管理的效率和安全性。有了這個強(qiáng)有力的工具,我們沒有理由再去造重復(fù)的輪子了。
-END-
聲明:
本文為中國聯(lián)通網(wǎng)研院網(wǎng)優(yōu)網(wǎng)管部IT技術(shù)研究團(tuán)隊(duì)獨(dú)家提供。
如需轉(zhuǎn)載或合作,請聯(lián)系管理員(zhouyh@dimpt.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容