文章目錄
-
- 1. 簡介
- 2. 安裝
-
- 2.1 單機
-
- 2.1.1 壓縮包安裝
- 2.1.2 Docker安裝
- 2.1.3 測試
- 2.2 僞叢集
- 3. Registry
1. 簡介
NiFi就是為了解決不同系統間資料自動流通問題而建立的工具。
架構

核心概念
NiFi術語 | 描述 |
---|---|
FlowFile | 表示在系統中移動的每個對象,對于每個FlowFile,NIFI都會記錄它一個屬性鍵值對和0個或多個位元組内容(有attribute和content)。 |
FlowFile Processor | 在eip術語中,處理器就是不同系統間的資料路由,資料轉換或者資料中介的組合。處理器可以通路給定FlowFile的屬性及其内容。處理器可以對給定工作單元中的零或多個流檔案進行操作,并送出該工作或復原該工作。 |
Connection | 連接配接處理器,充當隊列并允許各種程序以不同的速率進行互動。這些隊列可以動态地對進行優先級排序,并且可以在負載上設定上限,進而啟用背壓。 |
Flow Controller | 流控制器維護流程如何連接配接,并管理和配置設定所有流程使用的線程。流控制器充當代理,促進處理器之間流檔案的交換。 |
Process Group | 程序組裡是一組特定的流程和連接配接,可以通過輸入端口接收資料并通過輸出端口發送資料,這樣我們在程序組裡簡單地組合元件,就可以得到一個全新功能的元件。 |
叢集
NIFI叢集采用了Zero-Master Clustering(零主叢集)模式。NiFi群集中的每個節點對資料執行相同的任務,但每個節點都在不同的資料集上運作。Apache ZooKeeper選擇單個節點作為叢集協調器,ZooKeeper自動處理故障轉移。所有叢集節點都會向叢集協調器發送心跳報告和狀态資訊。叢集協調器負責斷開和連接配接節點。此外,每個叢集都有一個主節點,主節點也是由ZooKeeper選舉産生。我們可以通過任何節點的使用者界面(UI)與NiFi群集進行互動,并且我們所做的任何更改都将複制到叢集中的所有節點上。
NiFi術語 | 描述 |
---|---|
Nodes | 每個叢集由一個或多個節點組成,節點執行實際的資料處理。 |
NiFi Cluster Coordinator | 由Zookeeper選舉,叢集協調器是NiFi叢集中的節點,負責執行任務和管理叢集中的節點,管理節點擴充,同步節點的操作到所有節點。 |
Primary Node | 由Zookeeper選舉,每個叢集都有一個主節點。在此節點上,可以運作"隔離處理器"。如果該節點由于任何原因斷開與叢集的連接配接,将自動選擇新的主節點。預設相同的資料流在所有節點上運作。有的資料流不希望在所有的節點上運作,就可以設定主節點,隻在主節點上運作。 |
Isolated Processors | 隔離處理器,在NiFi叢集中,相同的資料流在所有節點上運作。是以,流中的每個元件都在每個節點上運作。但是,可能存在DFM不希望每個處理器在每個節點上運作的情況。在處理器中選擇在 All Node 還是 Primary Node 執行,All Node 會在所有節點上運作,Primary Node 隻會在主節點運作。 |
Heartbeats | 節點通過"心跳"将其健康狀況和狀态傳達給目前標明的叢集協調器,這使協調器知道它們仍然連接配接到叢集并正常工作。預設情況下,節點每5秒發出一次心跳,如果叢集協調器在40秒内沒有從節點收到心跳,則由于"缺乏心跳"而斷開節點。 |
2. 安裝
2.1 單機
2.1.1 壓縮包安裝
NiFi官網下載下傳
mkdir /usr/local/softwares/nifi
tar -zxvf nifi-1.10.0-bin.tar.gz -C /usr/local/softwares/nifi
可在
conf/nifi.properties
修改端口,原8080
背景啟動
./bin/nifi.sh start
通路
ip:8080/nifi
2.1.2 Docker安裝
docker run --name nifi \
-p 9090:9090 \
-d \
-e NIFI_WEB_HTTP_PORT='9090' \
apache/nifi:latest
2.1.3 測試
移動檔案測試
修改GetFile中的Input Directory屬性,使用相對位址的話是相對NiFi安裝目錄
修改GetFile的調用時間為60秒,預設0秒
修改PutFile中的Directory屬性
兩個元件相連,當GetFile是success時,才回到PutFile
PutFile是最後一個元件,需要設定自動終止關系。
同理,如果上一個元件還有其他沒配置的關系,也有勾上自動終止,否則沒法啟動該元件。
啟動前from和to檔案夾:
啟動NiFi移動檔案
2.2 僞叢集
僞叢集,建立nifi-cluster檔案夾,在一台虛拟機上啟動3個NiFi執行個體,組成叢集。
這裡使用外部Zookeeper,Zookeeper 單機及叢集安裝
複制單機版安裝包,修改conf/nifi.properties,注意三個端口
# HTTP主機和端口
nifi.web.http.host=192.168.110.40
nifi.web.http.port=9101
# 執行個體是群集中的節點,節點位址和端口
nifi.cluster.is.node=true
nifi.cluster.node.address=192.168.110.40
nifi.cluster.node.protocol.port=9111
# 選舉時間和候選節點數
nifi.cluster.flow.election.max.wait.time=1 mins
nifi.cluster.flow.election.max.candidates=1
# 負載均衡端口
nifi.cluster.load.balance.port=9121
# zookeeper位址
nifi.zookeeper.connect.string=192.168.110.40:2181,192.168.110.40:2281,192.168.110.40:2381
修改conf/state-management.xml,添加Zookeeper位址
<cluster-provider>
<id>zk-provider</id>
<class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class>
<property name="Connect String">192.168.110.40:2181,192.168.110.40:2281,192.168.110.40:2381</property>
<property name="Root Node">/nifi</property>
<property name="Session Timeout">10 seconds</property>
<property name="Access Control">Open</property>
</cluster-provider>
再複制兩份,注意修改conf/nifi.properties中的端口。
在叢集檔案夾新增啟動腳本,友善快速啟動。停止腳本類似,指令改為stop。
vi start-all.sh
cd nifi-1
./bin/nifi.sh start
cd ..
cd nifi-2
./bin/nifi.sh start
cd ..
cd nifi-3
./bin/nifi.sh start
chmod u+x start-all.sh
運作start-all.sh,啟動NiFi叢集
可看到9101為主節點和叢集協調器
一般會将首個處理器設定為在主節點運作。
如果不設定,那麼首個處理器就會執行多次。這裡有三個節點,是以會執行三次,執行後的資料在不同節點上,後面的流程也都在不同節點上運作。
如果設定了在首節點運作,并且下一個連接配接設定為負載均衡(大部分用輪詢)。那麼首個處理器隻在首節點運作,資料也會被負載均衡到不同節點上,後面的流程也都在不同節點上運作。
FlowFile在叢集下會有一個屬性Node Address,表示該FlowFile所在的節點位址。
3. Registry
Registry 是 Apache NiFi 的一個子項目,用于存儲和管理共享資源,實作版本控制。
下載下傳并解壓,背景啟動
./bin/nifi-registry.sh start
通路
ip:18080/nifi-registry
建立一個Bucket,然後配置Registry的位址,即可對組開啟版本控制。詳見Apache NiFi Registry 入門
參考:
NiFi官網 quickstart
NiFi官網文檔
【NIFI】 Apache NiFI 叢集搭建
Apache NIFI中文文檔
Apache NiFi Registry