NIFI 簡介
1、NIFI 的概念
1.1 起源:NIFI是爲了自動化的處理和管理系統之間的數據流而產生的,基本設計概念與基於流的編程[fbp]的主要思想密切相關
1.2 nifi核心概念
FlowFile:FlowFile表示通過系統移動的每個對象,包含數據流的基本屬性
FlowFile Processor(處理器):負責實際對數據流執行工作
Connection(連接線):負責不同處理器之間的連接,是數據的有界緩衝區
Flow Controller(流量控制器):管理進程使用的線程及其分配
Process Group(過程組):進程組是一組特定的進程及其連接,允許組合其他組件創建新組件
2、NIFI 架構
架構介紹
NIFI在主機系統中的JVM中執行,主要組件有:
網絡服務器
Web服務器的目的是託管NiFi的基於HTTP的命令和控制API。
流量(Flow)控制器
它爲要運行的擴展提供線程,並管理擴展接收要執行的資源的時間表。
擴展(Extension)
擴展在JVM中操作和執行。
FlowFile存儲庫
FlowFile存儲庫是NiFi跟蹤其對當前在流中活動的給定FlowFile知道的狀態的地方。
內容存儲庫
Content Repository是給定FlowFile的實際內容字節所在的位置。Provenance信息庫
Provenance信息庫
Provenance Repository是存儲所有來源事件數據的地方。
3、NIFI啓動
打開安裝目錄
前臺運行:bin/nifi.sh run
後臺運行:bin/nifi.sh start
重新啓動:bin/nifi.sh restart
安裝即服務:bin/nifi.sh install /etc/init.d/nifi ..
打開Web瀏覽器並導航到http://localhost:8080/nifi 即可看到NIFI的UI界面
4、NIFI UI界面介紹
工具欄以拖動的方式,拖動到nifi畫布。
5、NIFI實例
通過簡單的GetFile,PutFile實例,來熟悉NIFI使用
1、通過拖動UI上的Processor圖標到NIFI畫布上可以開始創建數據流,成功後如圖:
輸入GetFile,點擊ADD
選中GetFile處理器,右擊選擇Configure,配置相關信息,其中粗體的爲必填信息,完成後點擊APPLY。
同理設置PutFile,完成後如圖:
當處理器的左上角看到一個警告圖標圖標時說明處理器不能啓動,需要進一步正確配置相關內容。
每個處理器都有一組定義的“關係”,最基本的有success和failure。
使用鼠標懸停在GetFile處理器上,可以看到箭頭
拖動箭頭到PutFile,出現如下圖:選中success點擊add即可完成。
可以看到PutFile處理器上仍有警告。提示爲success和failure關係未連接到其他組件和自動終止。可以右擊configure。在setting中勾選中success和failure即可實現自動終止。
依次啓動各個處理器,一般按照從後向前的順序啓動,運行成功後結果如圖:
數據成功的完成了在不同位置的轉移
圖上可以看到輸入輸出的數據流的大小等情況。
當運行出現問題時右上角會出現紅色方框,放到上面會出現提示信息。
右擊處理器中間的連接線,可以配置處理FlowFiles的優先級和緩衝區大小。
NiFi爲back pressure提供了兩個配置元件。分別對應的是對象數量和數據大小。
並且進度條基於隊列百分比改變顏色:綠色(0-60%),黃色(61-85%)和紅色(86-100%)。鼠標懸停在上面可以顯示精確的百分比。
右擊處理器的data provenance可以看到關於數據流的詳細信息。
6、NIFI狀態指示燈
狀態指示燈:顯示處理器的當前狀態。可能有以下指標:
運行 正在運行:處理器當前正在運行。
停止 停止:處理器有效且已啓用,但未運行。
無效 無效:處理器已啓用,但當前無效,無法啓動。將鼠標懸停在此圖標上將提供一個工具提示,指示處理器無效的原因。
禁用 已禁用:處理器未運行,只有啓用後才能啓動。此狀態不表示處理器是否有效。
NIFI的常用處理器介紹
8、NIFI 集羣
核心模塊:
NiFi Cluster Coordinator(集羣協調器)–集羣中節點,負責控制任務和管理節點有負載均衡的功能。
節點 –負責實際的數據處理
主節點 –有zookeeper自動選擇,此節點上運行隔離處理器
Isolated Processors(隔離處理器) – 不希望在每個節點上運行的任務。獨立運行。
Heartbeats(心跳) –傳達節點的運行狀態。與集羣協調器通信
特點:採用零主集羣範例。每個節點對數據執行相同的任務,但每個節點對不同的數據集進行操作
1、普通集羣
配置conf/nifi.properties下的:
nifi.cluster.is.node=true (作爲集羣節點)
nifi.zookeeper.connect.string=name87:2181,name86:2181(連接到zookeeper)
並將相關的地址改爲主機名(默認爲localhost),不改會造成集羣啓動成功後,顯示的節點名相同。
2、帶證書的用戶驗證集羣
一、nifi的安全配置
NIIF的Security Configuration,可通過附帶的TLS生成工具包配置。
配置過程如下:
打開toolkit安裝目錄,運行
bin/tls-toolkit.sh standalone -n ‘name87,name86 -C ‘CN=username,OU=NIFI’
生成證書和相關的配置文件
-n,–hostnames主機名
-C,–clientCertDn客戶端證書的DN
cp name87/* ${nifi_home}/conf/
將相關配置文件複製到NIFI的conf文件目錄下。
二、集羣搭建
將conf/nifi.properties下的:
nifi.cluster.is.node=true (作爲集羣節點)
nifi.zookeeper.connect.string=name87:2181,name86:2181(連接到zookeeper)
並配置conf/zookeeper.properties下的:
server.1=name87:2888:3888
server.2=name86:2888:3888
配置conf/state-management.xml:
name87:2181,name86:2181
三、用戶認證
用戶認證有LDAP和Kerberos兩種方式
利用kerberos認證過程如下:
安裝配置kdc:
yum -y install krb5-server krb5-libs krb5-auth-dialog krb5-workstation (安裝)
vi /etc/krb5.conf 將默認的兩項改爲自己的主機名,如下
[realms]
EXAMPLE.COM = {
kdc = name87
admin_server = name87 }
kdb5_util create –s 創建kerberos數據庫,並輸入相應的密碼
開啓kdc和kdc admin服務
# /etc/rc.d/init.d/krb5kdc start
# /etc/rc.d/init.d/kadmin start
# chkconfig krb5kdc on
# chkconfig kadmin on
添加服務主體並導出keytab
# kadmin.local
# addprinc -randkey nifi/HDF
# ktadd -k /opt/nifi-HDF.keytab nifi/HDF
# q
添加用戶認證並初始化
# kadmin.local -q "addprinc username"
# kinit [email protected]
在conf/nifi.properties中相應位置添加以下內容:
nifi.security.user.login.identity.provider=kerberos-provider
# kerberos #
nifi.kerberos.krb5.file=/etc/krb5.conf
nifi.kerberos.service.principal=nifi/[email protected]
nifi.kerberos.keytab.location=/opt/nifi-HDF.keytab
nifi.kerberos.authentication.expiration=12 hours
在conf/login-identity-providers.xml中配置如下:
<provider>
<identifier>kerberos-provider</identifier>
<class>org.apache.nifi.kerberos.KerberosProvider</class>
<property name="Default Realm">EXAMPLE.COM</property>
<property name="Kerberos Config File">/etc/krb5.conf</property>
<property name="Authentication Expiration">12 hours</property>
</provider>
#在conf/authorizers.xml中將初始用戶設置爲kdc中建立的用戶,並添加節點代理如下:
<property name="Initial Admin Identity">[email protected]</property>
<property name="Node Identity 1">CN=name87, OU=NIFI</property>
<property name="Node Identity 2">CN=name86, OU=NIFI</property>
啓動NIFI,輸入username和相應的密碼登錄完成。
啓動完成後入下圖:
注意此時的網址變爲了:https://hostip:9443/nifi/
四、新增用戶
增加用戶過程如下:以主賬戶登錄–在kdc中添加用戶(設置用戶名、密碼)–在nifi中添加相應用戶(並設置ui權限)–退出主賬戶–已設置的其他賬戶登錄。
新增用戶的相關權限可通過主用戶在nifi全局菜單欄的polices下更改。
五、使用集羣實現負載均衡
實現方式:通過NIFI的Remote Process Group(RPG)
如圖:
具體流程爲 Processor1–RPG–input–Processor2
注意此時的url應該爲集羣協調器所在節點的url。Url可換爲主機名。
連接RPG需要配置,否則無法連接
# Site to Site properties
nifi.remote.input.host=name87
nifi.remote.input.secure=false
nifi.remote.input.socket.port=12222
nifi.remote.input.http.enabled=true
nifi.remote.input.http.transaction.ttl=30 sec
對於帶權限的nifi實例(即配置了用戶的),需要通過:Input模塊可能需要通過左下方的鎖更改取得receive data權限。