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

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

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


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

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

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

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

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

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

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

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

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

FBP術(shù)語(yǔ)

注釋

FlowFile

Information Packet

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

FlowFile Processor

Black Box

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

Connection

Bounded Buffer

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

Flow Controller

Scheduler

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

Process Group

subnet

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

用NiFi要做的工作是:從FTP上獲取此文件,進(jìn)行解壓,將其中的M替換為“男”,F(xiàn)替換為“女”,并將處理后的txt文件put到HDFS的特定路徑下。為實(shí)現(xiàn)此功能,編輯的NiFi流如下:
由五個(gè)Processor實(shí)現(xiàn)了整個(gè)功能。依次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,通過(guò)定義正則表達(dá)式,可對(duì)正則表達(dá)式匹配到的內(nèi)容進(jìn)行替換,從而起到對(duì)FlowFile內(nèi)容進(jìn)行修改的作用。此ReplaceText命名為“替換M為男”,即將FlowFile內(nèi)容中的M替換成文字“男”。具體配置如下:
其中,Search Value為定義的正則表達(dá)式,ReplacementValue為替換內(nèi)容。在此Processor,此為替換M為“男”。
4. ReplaceText,與上一個(gè)Processor是同一個(gè)類型,在此ReplaceText命名為“替換F為女”,即將FlowFile內(nèi)容中的F替換成文字“女”。
5. PutHDFS,負(fù)責(zé)將FlowFile以文件形式存放到HDFS的特性路徑下。,具體配置如下:
其中,HadoopConfiguration Resource為目標(biāo)HDFS的配置文件。Directory為HDFS上存放文件的目錄。
在經(jīng)過(guò)了上述5個(gè)Processor的數(shù)據(jù)流處理過(guò)程,之前在FTP上的userlist.txt.gz文件已經(jīng)被解壓、字符替換,并Put到HDFS的特定路徑下了。經(jīng)過(guò)處理后的文件如下:

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

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

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

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