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

  • 相关阅读:
    Django项目实战之用户头像上传与访问
    ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
    《http权威指南》读书笔记13
    《http权威指南》读书笔记12
    《http权威指南》读书笔记11
    《http权威指南》读书笔记10
    《http权威指南》读书笔记9
    移动端帧动画抖动解决方案
    display: table-cell的实用应用
    《http权威指南》读书笔记8
  • 原文地址:https://www.cnblogs.com/h--d/p/10285596.html
Copyright © 2020-2023  润新知