MiNiFi初探

Apache NiFi是由NSA(美國(guó)國(guó)家安全局)開源并貢獻(xiàn)給的Apache社區(qū)的易于使用且功能強(qiáng)大的數(shù)據(jù)處理和分發(fā)系統(tǒng)瑞信,可以幫助用戶建立和管理復(fù)雜的數(shù)據(jù)流寄纵,NiFi在近幾年大數(shù)據(jù)項(xiàng)目的數(shù)據(jù)接入層得到了廣泛應(yīng)用左刽。在物聯(lián)網(wǎng)(IoT)場(chǎng)景下,系統(tǒng)中有大量的設(shè)備(例如傳感器店茶,路由器鲫咽,零售終端等)需要進(jìn)行數(shù)據(jù)的采集和上報(bào),如果采用中央NiFi集群溃斋,就需要處理大量設(shè)備的連接問題界拦,加大了NiFi的壓力。于是梗劫,旨在直接在數(shù)據(jù)產(chǎn)生的源頭收集和處理數(shù)據(jù)的子項(xiàng)目MiNiFi就應(yīng)運(yùn)而生了享甸。

本文將簡(jiǎn)要探討MiNiFi的原理截碴,部署與配置,如何運(yùn)行數(shù)據(jù)流以及與NiFi的集成蛉威。

說(shuō)句題外話日丹,MiNiFi應(yīng)該怎么讀?根據(jù)MiNiFi項(xiàng)目的FAQs(堪稱史上最簡(jiǎn)短的FAQs~ )蚯嫌,MiNiFi應(yīng)該讀作min-uh-fahy



原理

MiNiFi作為NiFi的子項(xiàng)目哲虾,是對(duì)NiFi數(shù)據(jù)流管理核心原則的擴(kuò)展,聚焦于如何從數(shù)據(jù)產(chǎn)生的源頭收集數(shù)據(jù)择示;MiNiFi解決了數(shù)據(jù)在產(chǎn)生源頭和消費(fèi)者之間相互傳遞和管理的困難束凑,可以作為數(shù)字信號(hào)的“第一或最后一英里”,通過實(shí)現(xiàn)邊緣設(shè)備智能(edge intelligence)來(lái)調(diào)整數(shù)據(jù)流的雙向通信对妄。MiNiFi設(shè)計(jì)的具體目標(biāo)包括:

- 更小的體積和更低的資源消耗

- 集中管理Agents

- 可以生成數(shù)據(jù)世系(Data Provenance)

- 可以和NiFi集成

因?yàn)閿?shù)據(jù)采集的初段是分布式且通常涉及大量的終端設(shè)備(例如物聯(lián)網(wǎng))湘今,MiNiFi具備NiFi的除了前端頁(yè)面和部分管理命令行之外的所有核心能力,可以創(chuàng)建和部署數(shù)據(jù)流剪菱,使大量設(shè)備的統(tǒng)一管理成為可能摩瞎。

- MiNiFi的配置由聲明式的配置文件(YAML)驅(qū)動(dòng),可以通過主流的自動(dòng)化管理工具輔助進(jìn)行配置下發(fā)來(lái)管理大量的MiNiFi實(shí)例

- MiNiFi Agents通過點(diǎn)對(duì)點(diǎn)協(xié)議(例如HTTP/HTTPs)來(lái)將收集的數(shù)據(jù)傳送到中央的NiFi集群中

- MiNiFi聚焦于對(duì)NiFi的精簡(jiǎn)孝常,所以NiFi并沒有包含NiFi支持的全部Processor旗们,Java Agents可以通過添加NiFi既有的NAR包來(lái)擴(kuò)展processor種類,滿足用戶在設(shè)計(jì)和部署自己的數(shù)據(jù)流時(shí)對(duì)數(shù)據(jù)源的多樣化需求

- MiNiFi與NiFi之間可以實(shí)現(xiàn)雙向通信(Bi-directional Communication)构灸,雙向通信使得處理流程的動(dòng)態(tài)更新能通過數(shù)據(jù)流的重新設(shè)計(jì)和重新部署來(lái)實(shí)現(xiàn)上渴,并且將從數(shù)據(jù)中獲得的洞察轉(zhuǎn)化為可以應(yīng)用的新的數(shù)據(jù)流設(shè)計(jì)


下載與部署

MiNiFi要能夠被部署到邊緣(edge)設(shè)備上,則其安裝包必須比NiFi小很多(NiFi的安裝包超過900MB喜颁!)稠氮。MiNiFi的安裝包小于60MB,具體大小取決于不同的版本半开,MiNiFi提供了Java和C++兩個(gè)版本:

- Java版本為可以運(yùn)行大部分的NiFi processors隔披,但是體積也更大(約59MB)同時(shí)需要消耗額外的系統(tǒng)資源(默認(rèn)24MB的max JVM heapsize);如果用戶希望最大程度的集成NiFi在處理數(shù)據(jù)上的能力寂拆,Java 版本是最好的選擇奢米;(本文中我們以Java Agent為例進(jìn)行測(cè)試)

- C++版本更加輕量化(只需要大約3MB),消耗更少的系統(tǒng)資源(大約5MB的內(nèi)存)纠永,但是只具備NiFi processors的有限的子集鬓长;如果用戶只是獲取數(shù)據(jù)然后把數(shù)據(jù)傳給下游系統(tǒng)(例如中央的NiFi集群)處理并且比較在乎系統(tǒng)資源的占用,那么C++版本比較合適尝江。

用戶可以從MiNiFi項(xiàng)目主頁(yè)下載MiNiFi的安裝包涉波,每個(gè)版本的MiNiFi安裝包都包括以下三個(gè)部分:

- MiNiFi:即MiNiFi安裝包,包含了MiNiFi的所有核心功能,部署和執(zhí)行用戶設(shè)計(jì)的數(shù)據(jù)流

- MiNiFi Toolki Binaries :一個(gè)用來(lái)將NiFi的數(shù)據(jù)流模版轉(zhuǎn)化為MiNiFi的配置文件的工具包

- MiNiFi Command and Control Server Binaries:即MiNiFi C2啤覆,用于輔助用戶管理和控制MiNiFi實(shí)例中的數(shù)據(jù)流

MiNiFi善延,MiNiFi Toolket和MiNiFi C2都供了tar.gz,zip和源碼包三種不同的形式城侧,用戶可以根據(jù)自己的需要進(jìn)行選擇。部署MiNiFi需要預(yù)先在服務(wù)器或者設(shè)備上安裝系統(tǒng)級(jí)別的依賴彼妻,其中Java版本預(yù)裝JVM嫌佑,C++版本則需要leveldb,libxml等依賴庫(kù)侨歉,具體如下:

安裝好依賴以后屋摇,用戶只需要將從項(xiàng)目主頁(yè)將所需的安裝包下載并解壓到目標(biāo)環(huán)境的任意目錄(如home目錄)中,就可以開始啟動(dòng)MiNiFi去執(zhí)行用戶設(shè)計(jì)數(shù)據(jù)流了幽邓。

MiNiFi安裝包解壓后如下:

其中炮温,bin/目錄下是MiNiFi的管理命令,conf/目錄下是MiNiFi的數(shù)據(jù)流配置文件(其中config.yml定義了MiNiFi上執(zhí)行的數(shù)據(jù)流)牵舵,lib/目錄下是MiNiFi核心的jar包和nar包柒啤,啟動(dòng)之后還會(huì)生成一個(gè)記錄日志的logs/目錄。


設(shè)計(jì)與部署數(shù)據(jù)流

在使用MiNiFi之前畸颅,首先需要檢查NiFi的配置($NIFI_HOME/conf/nifi.properties)担巩,需要確保NiFi實(shí)例已經(jīng)配置了nifi.remote.input.socket.port(默認(rèn)是未指定的),否則NiFi收不到MiNiFi上傳的數(shù)據(jù)没炒。具體配置項(xiàng)如下:

# Site to Site properties

nifi.remote.input.host=

nifi.remote.input.secure=false

nifi.remote.input.socket.port=1206

nifi.remote.input.http.enabled=true

nifi.remote.input.http.transaction.ttl=30 sec

如果沒有指定涛癌,則按上述配置修改$NIFI_HOME/conf/nifi.properties,然后重啟NiFi實(shí)例即可送火。

由于MiNiFi本身并沒有提供類似NiFi的用于設(shè)計(jì)數(shù)據(jù)流的前端頁(yè)面拳话,所以用戶可以用NiFi的前端頁(yè)面設(shè)計(jì)數(shù)據(jù)流,然后生成NiFi數(shù)據(jù)流模版(template)种吸,再將模版文件加載到MiNiFi所在環(huán)境中弃衍,具體步驟如下:

- 在NiFi中設(shè)計(jì)數(shù)據(jù)流

我們可以設(shè)計(jì)一個(gè)簡(jiǎn)單的數(shù)據(jù)流用于監(jiān)控MiNiFi所在服務(wù)器上的一個(gè)文本文件(在home下面創(chuàng)建一個(gè)用于測(cè)試的文本文件,文件里內(nèi)容為“test minifi”)骨稿,將文件的內(nèi)容發(fā)送給NiFi實(shí)例笨鸡,然后NiFi實(shí)例再把文本內(nèi)容寫入Kafka集群的topic里。實(shí)現(xiàn)整個(gè)數(shù)據(jù)流坦冠,需要MiNiFi和NiFi配合完成:

在MiNiFi側(cè)形耗,數(shù)據(jù)流由一個(gè)TailFile類型的processor和一個(gè)Remote Processor Group組成,TailFile類型的processor用于監(jiān)控并采集指定文件的內(nèi)容辙浑,Remote Processor Group用于將采集的數(shù)據(jù)發(fā)送到遠(yuǎn)端的NiFi實(shí)例:

MiNiFi與NiFi采用HTTP協(xié)議相互通信激涤,Remote Processor Group需要配置NiFi實(shí)例的URL和協(xié)議類型,具體配置如下:

在NiFi側(cè),數(shù)據(jù)流需要一個(gè)Input Port和一個(gè)PublishKafka類型的processor倦踢,Input Port用來(lái)接收發(fā)送自MiNiFi的數(shù)據(jù)送滞,PublishKafka類型的processor用于將收到的數(shù)據(jù)寫入Kafka的指定topic中:

- 在NiFi中,將所設(shè)計(jì)的MiNiFi側(cè)的數(shù)據(jù)流創(chuàng)建為模版并下載為XML格式的模版文件辱挥,再將模版文件拷貝到MiNiFi所在的環(huán)境中

- 利用MiNiFi ToolKit將數(shù)據(jù)流模版文件轉(zhuǎn)換為MiNiFi的配置文件(即$MINIFI_HOME/conf/config.yml犁嗅,舊的config.yml可以刪除或直接替換),轉(zhuǎn)換命令如下

./bin/config.sh transform /path/to/template.xml $MINIFI_HOME/conf/config.yml

- 修改生成的config.yml晤碘,在config.yml最后的Input Ports Section里添加NiFi實(shí)例的host和port(即NiFi實(shí)例配置的nifi.remote.input.socket.port)屬性褂微,配置示例如下:

- 啟動(dòng)MiNiFi執(zhí)行數(shù)據(jù)流

./minifi.sh start

- MiNiFi啟動(dòng)后,可以在$MINIFI_HOME/logs/minifi-app.log中查看MiNiFi的運(yùn)行日志园爷。如果沒有問題的話宠蚂,很快就可以在Kafka的指定topic中看到輸出的文本內(nèi)容:

此外,我們也可以在NiFi的界面的各個(gè)processor看到數(shù)據(jù)的流入童社,例如查看PublishKafka processor的Data provenance:

至此求厕,MiNiFi中的數(shù)據(jù)流運(yùn)行成功,整個(gè)數(shù)據(jù)流會(huì)一直監(jiān)控指定文件的內(nèi)容扰楼,將文件內(nèi)容通過MiNiFi和NiFi接力傳送到Kafka集群中呀癣。

如果要對(duì)MiNiFi上運(yùn)行的數(shù)據(jù)流進(jìn)行修改,可以通過重復(fù)上面的步驟灭抑,即:通過NiFi修改數(shù)據(jù)流的設(shè)計(jì) -> 生成模版文件 -> 將模版文件轉(zhuǎn)換為config.yml -> 替換舊的config.yml -> 重啟MiNiFi十艾。


后續(xù)計(jì)劃

通過對(duì)MiNiFi短暫的研究和測(cè)試,筆者認(rèn)為MiNiFi會(huì)在未來(lái)的數(shù)據(jù)接入-尤其是物聯(lián)網(wǎng)場(chǎng)景下的大量設(shè)備和數(shù)據(jù)的接入中發(fā)揮很大的價(jià)值腾节,因?yàn)镸iNiFi的出現(xiàn)使得很多數(shù)據(jù)采集和預(yù)處理工作可以前置到邊緣設(shè)備(如網(wǎng)關(guān)忘嫉,自動(dòng)汽車,零售終端等)中完成案腺,大大減輕了NiFi集群的壓力庆冕。 本文只是初步的測(cè)試,關(guān)于MiNiFi還有很多問題值得研究劈榨,例如:如何在嵌入式設(shè)備中實(shí)際測(cè)試MiNiFi的資源消耗和性能访递,如何擴(kuò)展MiNiFi的processor,如何實(shí)現(xiàn)從NiFi到MiNiFi的數(shù)據(jù)流配置文件自動(dòng)下發(fā)等同辣。

期待日后結(jié)合實(shí)際場(chǎng)景進(jìn)一步探索MiNiFi~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拷姿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子旱函,更是在濱河造成了極大的恐慌响巢,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棒妨,死亡現(xiàn)場(chǎng)離奇詭異踪古,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門伏穆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拘泞,“玉大人,你說(shuō)我怎么就攤上這事枕扫∨汶纾” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵烟瞧,是天一觀的道長(zhǎng)偷厦。 經(jīng)常有香客問我,道長(zhǎng)燕刻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任剖笙,我火速辦了婚禮卵洗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弥咪。我一直安慰自己过蹂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布聚至。 她就那樣靜靜地躺著酷勺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扳躬。 梳的紋絲不亂的頭發(fā)上脆诉,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音贷币,去河邊找鬼击胜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛役纹,可吹牛的內(nèi)容都是我干的偶摔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼促脉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辰斋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瘸味,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宫仗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后硫戈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锰什,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汁胆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梭姓。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嫩码,靈堂內(nèi)的尸體忽然破棺而出誉尖,到底是詐尸還是另有隱情,我是刑警寧澤铸题,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布铡恕,位于F島的核電站,受9級(jí)特大地震影響丢间,放射性物質(zhì)發(fā)生泄漏探熔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一烘挫、第九天 我趴在偏房一處隱蔽的房頂上張望诀艰。 院中可真熱鬧,春花似錦饮六、人聲如沸其垄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绿满。三九已至,卻和暖如春窟扑,著一層夾襖步出監(jiān)牢的瞬間喇颁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工嚎货, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留无牵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓厂抖,卻偏偏與公主長(zhǎng)得像茎毁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子忱辅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理七蜘,服務(wù)發(fā)現(xiàn),斷路器墙懂,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評(píng)論 6 342
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法橡卤,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法损搬,繼承相關(guān)的語(yǔ)法碧库,異常的語(yǔ)法柜与,線程的語(yǔ)...
    子非魚_t_閱讀 31,587評(píng)論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,795評(píng)論 0 11
  • 最近聽到了一些朋友創(chuàng)業(yè)的消息,有好有壞嵌灰,有些感觸弄匕。我引用來(lái)自知乎的一個(gè)比較好的關(guān)于創(chuàng)業(yè)的帖子,以供大家觀賞: 創(chuàng)業(yè)...
    ivanStronger閱讀 419評(píng)論 0 1