天天看點

NiFi 單機和叢集安裝與使用

文章目錄

    • 1. 簡介
    • 2. 安裝
      • 2.1 單機
        • 2.1.1 壓縮包安裝
        • 2.1.2 Docker安裝
        • 2.1.3 測試
      • 2.2 僞叢集
    • 3. Registry

1. 簡介

NiFi就是為了解決不同系統間資料自動流通問題而建立的工具。

架構

NiFi 單機和叢集安裝與使用

核心概念

NiFi術語 描述
FlowFile 表示在系統中移動的每個對象,對于每個FlowFile,NIFI都會記錄它一個屬性鍵值對和0個或多個位元組内容(有attribute和content)。
FlowFile Processor 在eip術語中,處理器就是不同系統間的資料路由,資料轉換或者資料中介的組合。處理器可以通路給定FlowFile的屬性及其内容。處理器可以對給定工作單元中的零或多個流檔案進行操作,并送出該工作或復原該工作。
Connection 連接配接處理器,充當隊列并允許各種程序以不同的速率進行互動。這些隊列可以動态地對進行優先級排序,并且可以在負載上設定上限,進而啟用背壓。
Flow Controller 流控制器維護流程如何連接配接,并管理和配置設定所有流程使用的線程。流控制器充當代理,促進處理器之間流檔案的交換。
Process Group 程序組裡是一組特定的流程和連接配接,可以通過輸入端口接收資料并通過輸出端口發送資料,這樣我們在程序組裡簡單地組合元件,就可以得到一個全新功能的元件。

叢集

NiFi 單機和叢集安裝與使用

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 測試

移動檔案測試

NiFi 單機和叢集安裝與使用

修改GetFile中的Input Directory屬性,使用相對位址的話是相對NiFi安裝目錄

NiFi 單機和叢集安裝與使用

修改GetFile的調用時間為60秒,預設0秒

NiFi 單機和叢集安裝與使用

修改PutFile中的Directory屬性

NiFi 單機和叢集安裝與使用

兩個元件相連,當GetFile是success時,才回到PutFile

NiFi 單機和叢集安裝與使用

PutFile是最後一個元件,需要設定自動終止關系。

同理,如果上一個元件還有其他沒配置的關系,也有勾上自動終止,否則沒法啟動該元件。

NiFi 單機和叢集安裝與使用

啟動前from和to檔案夾:

NiFi 單機和叢集安裝與使用

啟動NiFi移動檔案

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為主節點和叢集協調器

NiFi 單機和叢集安裝與使用

一般會将首個處理器設定為在主節點運作。

如果不設定,那麼首個處理器就會執行多次。這裡有三個節點,是以會執行三次,執行後的資料在不同節點上,後面的流程也都在不同節點上運作。

如果設定了在首節點運作,并且下一個連接配接設定為負載均衡(大部分用輪詢)。那麼首個處理器隻在首節點運作,資料也會被負載均衡到不同節點上,後面的流程也都在不同節點上運作。

NiFi 單機和叢集安裝與使用

FlowFile在叢集下會有一個屬性Node Address,表示該FlowFile所在的節點位址。

NiFi 單機和叢集安裝與使用

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

繼續閱讀