【NIFI】 Apache NiFI 集群搭建


NiFI 集群介紹

  NiFi集群架構

    

  NiFi采用Zero-Master Clustering范例。集群中的每個節點對數據執行相同的任務,但每個節點都在不同的數據集上運行。其中一個節點自動選擇(通過Apache ZooKeeper)作為集群協調器。然后,群集中的所有節點都會向此節點發送心跳/狀態信息,並且此節點負責斷開在一段時間內未報告任何心跳狀態的節點。此外,當新節點選擇加入群集時,新節點必須首先連接到當前選定的群集協調器,以獲取最新流。如果群集協調器確定允許該節點加入(基於其配置的防火牆文件),則將當前流提供給該節點,並且該節點能夠加入群集,假設節點的流副本與群集協調器提供的副本匹配。如果節點的流配置版本與群集協調器的版本不同,則該節點將不會加入群集。

NiFI 集群搭建

  環境

    1、系統:CentOS 7.4

    2、Java環境:JDK8

  單機NIFI搭建,請參考:【NIFI】 Apache NiFI 安裝及簡單的使用

  學會搭建ZooKeeper集群,更加容易理解NIFI集群搭建,請參考:【ZooKeeper】ZooKeeper安裝及簡單操作

  使用NiFi集成的zookeeper

    由於本例搭建三個節點的集群,且在一台機器上搭建,所以不同節點的相同功能端口會不同,如果搭建在三台機器上,IP不同,那么不同節點的相同功能端口可以相同

    1、准備三個單機NIFI實例,如下:

      

    2、編輯實例中,conf/zookeeper.properties文件,不同節點改成對應內容,內容如下:

 1 # 1節點2181,2節點2182,1節點2183
 2 clientPort=12181  3 initLimit=10                                                                                                                           
 4 autopurge.purgeInterval=24                                                                                                             
 5 syncLimit=5                                                                                                                            
 6 tickTime=2000                                                                                                                          
 7 dataDir=./state/zookeeper                                                                                                              
 8 autopurge.snapRetainCount=30
 9 
10 # 不同機器使用不同IP
11 server.1=127.0.0.1:12888:13888 12 server.2=127.0.0.1:14888:15888 13 server.3=127.0.0.1:16888:17888

    3、在單個實例中新建文件夾,${NIFI_HOME}/state/zookeeper,在此文件夾中新建文件myid,且輸入內容如下:

1 1

      節點2內容為:2,節點3內容為:3

      

    4、編輯節點conf/nifi.properties文件,修改內容如下:

 1 ####################
 2 # State Management #                                                                                                 
 3 ####################
 4 nifi.state.management.configuration.file=./conf/state-management.xml                                             
 5 nifi.state.management.provider.local=local-provider  
 6 nifi.state.management.provider.cluster=zk-provider
 7 #  指定此NiFi實例是否應運行嵌入式ZooKeeper服務器,默認是false                          
 8 nifi.state.management.embedded.zookeeper.start=true  9 nifi.state.management.embedded.zookeeper.properties=./conf/zookeeper.properties 
10 
11 # web properties #                                                 
12 nifi.web.war.directory=./lib    
13 # HTTP主機。默認為空白                                               
14 nifi.web.http.host=127.0.0.1 15 # HTTP端口。默認值為8080
16 nifi.web.http.port=18001 17 
18 # cluster node properties (only configure for cluster nodes) #   
19 # 如果實例是群集中的節點,請將此設置為true。默認值為false
20 nifi.cluster.is.node=true 21 # 節點的完全限定地址。默認為空白
22 nifi.cluster.node.address=127.0.0.1 23 # 節點的協議端口。默認為空白
24 nifi.cluster.node.protocol.port=28001 25 
26 # 指定在選擇Flow作為“正確”流之前等待的時間量。如果已投票的節點數等於nifi.cluster.flow.election.max.candidates屬性指定的數量,則群集將不會等待這么長時間。默認值為5 mins
27 nifi.cluster.flow.election.max.wait.time=1 mins 
28 # 指定群集中所需的節點數,以便提前選擇流。這允許群集中的節點避免在開始處理之前等待很長時間,如果我們至少達到群集中的此數量的節點
29 nifi.cluster.flow.election.max.candidates=1 30 
31 # cluster load balancing properties #  
32 nifi.cluster.load.balance.host=
33 nifi.cluster.load.balance.port=16342 34 
35 # zookeeper properties, used for cluster management # 
36 # 連接到Apache ZooKeeper所需的連接字符串。這是一個以逗號分隔的hostname:port對列表
37 nifi.zookeeper.connect.string=127.0.0.1:12181,127.0.0.1:12182,127.0.0.1:12183 38 nifi.zookeeper.connect.timeout=3 secs                                                      
39 nifi.zookeeper.session.timeout=3 secs                                                   
40 nifi.zookeeper.root.node=/nifi

     節點2,節點3內容跟節點1相同,只是nifi.web.http.port,nifi.cluster.node.protocol.port,nifi.cluster.load.balance.port,這三個端口區分開來,避免端口重復

    5、編輯實例conf/state-management.xml文件,內容如下:

1 <cluster-provider>                   
2     <id>zk-provider</id>                        
3     <class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class> 
4     <property name="Connect String">127.0.0.1:12181,127.0.0.1:12182,127.0.0.1:12183</property>           
5     <property name="Root Node">/nifi</property>               
6     <property name="Session Timeout">10 seconds</property>
7     <property name="Access Control">Open</property>
8 </cluster-provider>

    6、啟動三個實例,瀏覽器輸入:127.0.0.1:18001,訪問即可

      注意:如果不是在本機上訪問,需要把配置中,配置本機IP(Linux命令:ifconfig

      nifi.web.http.host=192.168.1.2

      nifi.cluster.node.address=192.168.1.2

     

     

  

  使用外部zookeeper

    1、開起集群Zookeeper,參考【ZooKeeper】ZooKeeper安裝及簡單操作

    2、准備三個單機NIFI實例

    3、實例中,conf/zookeeper.properties文件,可以不用編輯

    4、編輯節點conf/nifi.properties文件

 1 ####################
 2 # State Management #                                                                                                 
 3 ####################
 4 nifi.state.management.configuration.file=./conf/state-management.xml                                             
 5 nifi.state.management.provider.local=local-provider  
 6 nifi.state.management.provider.cluster=zk-provider
 7 #  指定此NiFi實例是否應運行嵌入式ZooKeeper服務器,默認是false  
 8 # 連接外部的時候,設置為false
 9 nifi.state.management.embedded.zookeeper.start=false  
10 nifi.state.management.embedded.zookeeper.properties=./conf/zookeeper.properties 
11 
12 # web properties #                                                 
13 nifi.web.war.directory=./lib    
14 # HTTP主機。默認為空白                                               
15 nifi.web.http.host=127.0.0.1 16 # HTTP端口。默認值為8080
17 nifi.web.http.port=18001 18 
19 # cluster node properties (only configure for cluster nodes) #   
20 # 如果實例是群集中的節點,請將此設置為true。默認值為false
21 nifi.cluster.is.node=true 
22 # 節點的完全限定地址。默認為空白
23 nifi.cluster.node.address=127.0.0.1 24 # 節點的協議端口。默認為空白
25 nifi.cluster.node.protocol.port=28001 26 
27 # 指定在選擇Flow作為“正確”流之前等待的時間量。如果已投票的節點數等於nifi.cluster.flow.election.max.candidates屬性指定的數量,則群集將不會等待這么長時間。默認值為5 mins
28 nifi.cluster.flow.election.max.wait.time=1 mins 
29 # 指定群集中所需的節點數,以便提前選擇流。這允許群集中的節點避免在開始處理之前等待很長時間,如果我們至少達到群集中的此數量的節點
30 nifi.cluster.flow.election.max.candidates=1 31 
32 # cluster load balancing properties #  
33 nifi.cluster.load.balance.host=
34 nifi.cluster.load.balance.port=16342 35 
36 # zookeeper properties, used for cluster management # 
37 # 連接到Apache ZooKeeper所需的連接字符串。這是一個以逗號分隔的hostname:port對列表
38 # 連接外部的時候使用外部ZooKeeper連接地址
39 nifi.zookeeper.connect.string=127.0.0.1:12181,127.0.0.1:12182,127.0.0.1:12183 40 nifi.zookeeper.connect.timeout=3 secs                                                      
41 nifi.zookeeper.session.timeout=3 secs                                                   
42 nifi.zookeeper.root.node=/nifi

 

    5、編輯實例conf/state-management.xml文件,內容如下:

<cluster-provider>                   
    <id>zk-provider</id>                        
    <class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class>
    <!-- 使用外部zookeeper連接地址 --> 
    <property name="Connect String">127.0.0.1:12181,127.0.0.1:12182,127.0.0.1:12183</property>           
    <property name="Root Node">/nifi</property>               
    <property name="Session Timeout">10 seconds</property>
    <property name="Access Control">Open</property>
</cluster-provider>

 

    6、啟動三個實例,瀏覽器輸入:127.0.0.1:18001,訪問即可

      注意:如果不是在本機上訪問,需要把配置中,配置本機IP(Linux命令:ifconfig)

      nifi.web.http.host=192.168.1.2

      nifi.cluster.node.address=192.168.1.2

問題排查

  1、查看nifi日志

    $NIFI_HOME/log/nifi-app.log

  2、查看官網文檔

    http://nifi.apache.org/docs.html  ==》 Admin Guide  ==》 搜索cluster或其他關鍵字

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM