专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Linux下NiFi集群部署

NiFi集群架

NiFi采用Zero-Master Clustering范例。集群中的每个节点对数据执行相同的任务,但每个节点都在不同的数据集上运行。其中一个节点自动选择(通过Apache ZooKeeper)作为集群协调器。然后,群集中的所有节点都会向此节点发送心跳/状态信息,并且此节点负责断开在一段时间内未报告任何心跳状态的节点。此外,当新节点选择加入群集时,新节点必须首先连接到当前选定的群集协调器,以获取最新流。如果群集协调器确定允许该节点加入(基于其配置的防火墙文件),则将当前流提供给该节点,并且该节点能够加入群集,假设节点的流副本与群集协调器提供的副本匹配。如果节点的流配置版本与群集协调器的版本不同,则该节点将不会加入群集。

NiFi默认端口及conf/nifi.properties文件中相应属性

功能 属性 默认值
HTTP端口 nifi.web.http.port 8080
HTTPS端口* nifi.web.https.port 9443
远程输入套接字端口* nifi.remote.input.socket.port 10443
集群节点协议端口* nifi.cluster.node.protocol.port 11443
集群节点负载均衡端口 nifi.cluster.node.load.balance.port 6342
Web HTTP转发端口 nifi.web.http.port.forwarding

标有星号(*)的端口的属性值在conf/nifi.properties中默认为空白

嵌入式Zookeeper

功能 属性 默认值
Zookeeper客户端端口 clientPort 2181
Zookeeper服务器仲裁和Leader选举端口 server.1

集群搭建

参考文档:

本次演示为三节点

  • 10.200.0.11(nifi-01)
  • 10.200.0.12(nifi-02)
  • 10.200.0.13(nifi-03)

本地使用包:Orack JDK 1.8.231NiFi 1.9.2

环境配置

1、 上传nifi及jdk包至每台服务器的/tmp/nifi_install路径下
2、 在所有服务器添加host解析

    # cat >> /etc/hosts << EOF
    > 10.200.0.11 nifi-01
    > 10.200.0.12 nifi-02
    > 10.200.0.13 nifi-03
    > EOF

部署

集群部署单机部署方式除个别配置文件需改动外基本一致

1、 创建部署路径

    # mkdir -p /data/nifi

2、 解压NiFi与JDK

    # tar -zxvf /tmp/nifi_install/nifi-1.9.2-bin.tar.gz -C /data/nifi/
    # tar -zxvf /tmp/nifi_install/jdk-8u231-linux-x64.tar.gz -C /data/nifi/

3、 在NiFi配置文件conf/nifi-env.sh中添加JAVA_HOME值,指定为我们上传的JDK

    # sed -i "21iexport JAVA_HOME=/data/nifi/jdk1.8.0_231/" /data/nifi/nifi-1.9.2/bin/nifi-env.sh

配置Zookeeper

注:NiFi有集成的Zookeeper, 可以不在单独安装, 而是通过NiFi配置启用内置Zookeeper服务

编辑conf/zookeeper.properties

# vim /data/nifi/nifi-1.9.2/conf/zookeeper.properties

在文件中添加server值

# zookeeper端口
clientPort=2181
initLimit=10
autopurge.purgeInterval=24
syncLimit=5
tickTime=2000
dataDir=./state/zookeeper
autopurge.snapRetainCount=30

# 添加nifi集群嵌入的zookeeper地址
server.1=nifi-01:2888:3888
server.2=nifi-02:2888:3888
server.3=nifi-03:2888:3888

注:server.1 中的数字1为服务器的ID,需要与myid文件中的id一致,下一步将配置myid

配置myid

在每个实例中新建文件夹${NIFI_HOME}/state/zookeeper,并在此文件夹中新建文件myid,且输入内容为1(请根据上述conf/zookeeper.propertiesserver.配置)

注意:每台服务器上配置myid不同,请根据server.N填写

# mkdir -p /data/nifi/nifi-1.9.2/state/zookeeper
# echo 1 > /data/nifi/nifi-1.9.2/state/zookeeper/myid

修改nifi配置

编辑conf/nifi.properties文件

# vim /data/nifi/nifi-1.9.2/conf/nifi.properties

修改内容如下(已省略部分配置说明)

...
####################
# State Management #
####################
nifi.state.management.configuration.file=./conf/state-management.xml
nifi.state.management.provider.local=local-provider
nifi.state.management.provider.cluster=zk-provider
# 指定此NiFi实例是否应运行嵌入式ZooKeeper服务器,默认是false
nifi.state.management.embedded.zookeeper.start=true
nifi.state.management.embedded.zookeeper.properties=./conf/zookeeper.properties
...
# web properties #
nifi.web.war.directory=./lib
# HTTP主机,当前nifi安装服务器IP。默认为空白
nifi.web.http.host=nifi-01
# HTTP端口。默认值为8080
nifi.web.http.port=8080
nifi.web.http.network.interface.default=
nifi.web.https.host=
nifi.web.https.port=
nifi.web.https.network.interface.default=
nifi.web.jetty.working.directory=./work/jetty
nifi.web.jetty.threads=200
nifi.web.max.header.size=16 KB
nifi.web.proxy.context.path=
nifi.web.proxy.host=
...
# cluster node properties (only configure for cluster nodes)
# 如果实例是群集中的节点,请将此设置为true。默认值为false
nifi.cluster.is.node=true
# 节点的完全限定地址,当前nifi安装服务器IP。默认为空白
nifi.cluster.node.address=nifi-01
# 节点的协议端口。默认为空白
nifi.cluster.node.protocol.port=28001
nifi.cluster.node.protocol.threads=10
nifi.cluster.node.protocol.max.threads=50
nifi.cluster.node.event.history.size=25
nifi.cluster.node.connection.timeout=5 sec
nifi.cluster.node.read.timeout=5 sec
nifi.cluster.node.max.concurrent.requests=100
nifi.cluster.firewall.file=
# 指定在选择Flow作为“正确”流之前等待的时间量。
# 如果已投票的节点数等于nifi.cluster.flow.election.max.candidates属性指定的数量,
# 则群集将不会等待这么长时间。默认值为5 mins
nifi.cluster.flow.election.max.wait.time=1 mins
nifi.cluster.flow.election.max.candidates=
...
# zookeeper properties, used for cluster management #
# 连接到Apache ZooKeeper所需的连接字符串。这是一个以逗号分隔的hostname:port对列表
nifi.zookeeper.connect.string=nifi-01:2181,nifi-02:2181,nifi-03:2181
nifi.zookeeper.connect.timeout=3 secs
nifi.zookeeper.session.timeout=3 secs
nifi.zookeeper.root.node=/nifi

修改state-management

编辑conf/state-management.xml文件

# vim /data/nifi/nifi-1.9.2/conf/state-management.xml

内容如下

<cluster-provider>
        <id>zk-provider</id>
        <class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class>
        <!-->配置为nifi节点的ip加zookeeper端口号,以逗号分隔<-->
        <property name="Connect String">nifi-01:2181,nifi-02:2181,nifi-03:2181</property>
        <property name="Root Node">/nifi</property>
        <property name="Session Timeout">10 seconds</property>
        <property name="Access Control">Open</property>
    </cluster-provider>

配置NiFi运行内存

# vim /data/nifi/nifi-1.9.2/conf/bootstrap.conf

修改如下内容

# JVM memory settings
java.arg.2=-Xms2048m
java.arg.3=-Xmx4096m

注:可根据服务器性能合理设置nifi内存

启动NiFi服务

# ln -s /data/nifi/nifi-1.9.2/bin/nifi.sh /etc/init.d/nifi
# service nifi start

使用Nginx代理

使用Nginx反向代理NiFi集群并做负载均衡

安装Nginx

增加对应的Nginx源

$ rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

yum安装Nginx

$ yum -y install nginx

编写NiFi.conf

# vim /etc/nginx/conf.d/nifi-cluster.conf

内容如下

upstream nifi-cluster {
    server nifi-01:8080 max_fails=3 fail_timeout=15;
    server nifi-02:8080 max_fails=3 fail_timeout=15;
    server nifi-03:8080 backup;
}
server {
    listen 81;
    server_name _;
    location /nifi/ {
        proxy_pass http://nifi-cluster/nifi/;
        proxy_set_header X-ProxyScheme http;
        proxy_set_header X-ProxyHost $http_host;
        proxy_set_header X-ProxyPort $server_port;
        proxy_set_header X-ProxyContextPath /;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_connect_timeout 180;
        proxy_send_timeout 180;
        proxy_read_timeout 180;
        proxy_redirect off;
     }
    location /nifi-api/ {
        proxy_pass http://nifi-cluster/nifi-api/;
        proxy_set_header X-ProxyScheme http;
        proxy_set_header X-ProxyHost $http_host;
        proxy_set_header X-ProxyPort $server_port;
        proxy_set_header X-ProxyContextPath /;
     }
    location /nifi-docs/ {
        proxy_pass http://nifi-cluster/nifi-docs/;
        proxy_set_header X-ProxyScheme http;
        proxy_set_header X-ProxyHost $http_host;
        proxy_set_header X-ProxyPort $server_port;
        proxy_set_header X-ProxyContextPath /;
    }
}

保存并退出,然后使用nginx -t命令检查配置是否正常

启动Nginx

# systemctl start nginx

现在可以浏览器中访问http://ip:81/nifi/即可进入nifi集群

文章永久链接:https://tech.souyunku.com/42870

未经允许不得转载:搜云库技术团队 » Linux下NiFi集群部署

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们