H__D  

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或其他关键字

 

posted on 2019-01-18 00:39  H__D  阅读(6768)  评论(0编辑  收藏  举报