当前位置: 首页 > news >正文

Nifi05 Nifi单节点、集群部署以及迁移

Nifi单节点、集群部署以及迁移

1 单机部署

1.1 检查Java环境

## 因为nifi是用Java写的,所以在Linux上部署nifi的时候,应当具有Java环境
## 可通过java命令查看java是否存在
## 不存在需自行安装
[root@zxy_slave1 bin]# java -version
java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)

jdk安装

#java安装大致步骤
#一、可通过wget下载,或者上传安装包
#二、配置环境变量
[root@zxy_slave1 /]# vim /etc/profile

# 在unset i前添加如下内容即可
export JAVA_HOME=/zxy/apps/jdk1.8.0_311
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export  PATH=${JAVA_HOME}/bin:$PATH

unset i
unset -f pathmunge

#三、刷新环境变量
[root@zxy_slave1 /]# source /etc/profile

#四、通过输入java命令即可检查是否具有Java环境

1.2 解压nifi安装包

nifi官网所有版本

官网下载1.9.2

在这里插入图片描述

[root@zxy_slave1 software]# tar -zxvf nifi-1.9.2-bin.tar.gz -C /zxy/apps
nifi-1.9.2/README
nifi-1.9.2/LICENSE
nifi-1.9.2/NOTICE
nifi-1.9.2/extensions/
nifi-1.9.2/lib/javax.servlet-api-3.1.0.jar
nifi-1.9.2/lib/jetty-schemas-3.1.jar
nifi-1.9.2/lib/logback-classic-1.2.3.jar
nifi-1.9.2/lib/logback-core-1.2.3.jar
nifi-1.9.2/lib/slf4j-api-1.7.25.jar
nifi-1.9.2/lib/jcl-over-slf4j-1.7.25.jar
........
[root@zxy_slave1 apps]# mv nifi-1.9.2 nifi01

1.3 修改端口

[root@zxy_slave1 apps]# cd nifi01
[root@zxy_slave1 nifi01]# cd  conf/
# 单机安装比较简单,可根据需要自行修改端口
# nifi.web.http.port
[root@zxy_slave1 conf]# vim nifi.properties

# web properties #
nifi.web.war.directory=./lib
nifi.web.http.host=
nifi.web.http.port=58080
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=

1.4 启动

# 可通过./nifi.sh实现启动、关闭、重启、查看状态等
[root@zxy_slave1 bin]# ./nifi.sh
Usage nifi {start|stop|run|restart|status|dump|install}

# 启动命令
[root@zxy_slave1 bin]# ./nifi.sh start

Java home: /zxy/apps/jdk1.8.0_311
NiFi home: /zxy/apps/nifi01

Bootstrap Config File: /zxy/apps/nifi01/conf/bootstrap.conf

1.5 检查

  使用systemctl status firewalld查看防火墙状态,以及服务器需要开放58080端口。

# 因为nifi启动需要时间,使用./nifi.sh start后
# 可以使用netstat -nltp查看端口是否启动起来
# 通过netstat -nltp
[root@zxy_slave1 bin]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:58080           0.0.0.0:*               LISTEN      2961/java

1.6 查看

ip:port:/nifi

在这里插入图片描述

2 Nifi 集群部署-内置Zookeeper

2.1 集群介绍

  单个服务器部署一个Nifi实例不足以处理当前的数据量,那么就会有两种处理方案。一则是在多个Nifi服务器上处理相同的数据流,但是这样就会产生管理问题,每次更改或更新数据流,都需要在各个服务器上做调整。二则是使用Nifi集群,在增加处理能力的同时,也支持单接口控制,通过一个接口更改整个集群数据流并监控数据流。

  零主集群即每个节点都可以作为主节点执行任务,节点通过Zookeeper协调,首先Zookeeper会选择一个节点作为集群协调器,然后集群中所有节点都会像该节点发送心跳。如果存在节点长时间未发送心跳,则集群协调器有权断开该节点的连接。当有新的节点加入集群时,新节点必须首先连接到集群协调器,获得最新的流信息。如果集群协调器确定允许该节点加入,则将当前流提供给该节点,当节点的流配置版本与集群协调器的版本相同,则该节点可以加入集群,否则不能加入。

在这里插入图片描述

2.2 相关术语

NiFi集群协调器(NiFi Cluster Coordinator):集群协调器是Nifi集群中的一个节点,由Zookeeper选举出,负责管理集群中允许执行任务的节点,并为新加入的节点提供最新的数据流量。当DataFlow Manager管理集群中的数据流时,可以通过集群中任何节点的用户界面执行此操作,所做的节点会复制到集群中的所有节点。

节点(Nodes):每个集群有一个或多个节点组成,节点执行数据的处理操作。

主节点(Primary Node):每个集群都有一个主节点,可以运行隔离处理器。zookeeper用于自动选择主节点,如果该节点断开了与集群的连接,则Zookeeper负责选举新的主节点。用户可以通过Cluster页面查看哪个节点作为主节点。主节点的Status会有PRIMARY字样。

在这里插入图片描述

孤立的Processor:Nifi集群中,相同的数据流会在所有节点运行。但是可能存在不希望每个节点都运行的场景。比如我使用ExecuteSQL执行Truncate语句,如果选择All nodes,那么你集群中有几个节点,就会执行几次,这样会导致传给下一步重复的行为,最终导致数据不一致。那么像这种情况,使用Primary node无疑是最佳的选择。

心跳:节点通过"心跳"将本节点的讲课状况和状态传达给集群中的集群协调器节点。集群协调器接收到各节点的心跳,就知道哪些节点处于正常情况。默认情况下,节点每5秒发送一次心跳,如果集群协调器在40秒内还没有接收到心跳,则断开该节点的连接。发送心跳时间可在nifi.properties配置文件中修改。集群协调器断开节点的原因是协调器需要确保集群中每个节点都处于同步状态,如果没有定期接收到心跳,协调器就无法确定该节点是否正常同步。如果在40秒后该节点发送新的心跳,则协调器自动把请求节点加入集群。一旦接收到心跳,由于心跳不足导致的断开和重新了解信息都会报给给用户界面的DFM。

2.3 集群状况

部署Nifi集群,因为服务器有限,为实现集群模式,这里采用伪集群(在单台服务器上部署三个Nifi节点来实现Nifi集群)。正常集群与伪集群的安装区别不大,正常集群通常是通过IP来区分各个节点,而伪集群通常是通过不同的IP地址来实现区分各个节点。

[root@zxy_slave1 apps]# ls | grep nifi
nifi01
nifi02
nifi03

2.4 Zookeeper配置文件

  修改conf目录下的zookeeper.properties配置文件。server1,server2,server3代表zookeeper的集群。

#客户端连接的端口号
ClientPort=2181
# 不同的IP和选举端口号
server.1=ip:2887:3887
server.2=ip:2888:3888
server.3=ip:2889:3889

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.4.1 创建zookeeper的myid文件

在这里插入图片描述

2.5 集群通信连接配置文件

  修改conf目录下的state-management.xml文件,找到stateManagement根节点下的cluster-provider节点,修改id为zk-provider的name="Connect String"的property。

<cluster-provider>
   <id>zk-provider</id>
        <class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class>
   <property name="Connect String">ip:2181,ip:2182,ip:2183</property>
   <property name="Root Node">/nifi</property>
   <property name="Session Timeout">10 seconds</property>
   <property name="Access Control">Open</property>
</cluster-provider>

在这里插入图片描述

在这里插入图片描述

2.6 Nifi配置文件

  Nifi依赖于zookeeper以实现集群配置。但是有些环境中,部署了Nifi,而没有现有的zookeeper。为了减少zookeeper维护的负担,nifi提供内置的zookeeper使用。

在这里插入图片描述

2.6.1 启动内置zookeeper

  是否应用内置zookeeper,默认为false,修改为true即可

在这里插入图片描述

2.6.2 远程端口

在这里插入图片描述

2.6.3 Web端口

  修改host和port。这里的端口号是用来查看nifi的web端口

在这里插入图片描述

2.6.4 集群节点设置

  第一条:实例是否是集群中的节点,设置为true。第二条:节点地址。第三条:节点的协议端口。第四条:指定在选择flow作为正确流之前等待的时间。如果已投票的节点数等于nifi.cluster.flow.election.max.candidates对应的数量,则集群不会等待太久。第五条:指定集群中的节点数,以便提前选择流。允许集群中的节点避免在开始处理之前等待很长时间,集群中的节点至少要达到以下数量。

在这里插入图片描述

2.6.5 集群load balance

在这里插入图片描述

2.6.6 Zookeeper连接

  连接zookeeper的字符串。

在这里插入图片描述

2.6.7 启动

  启动三台nifi节点。

在这里插入图片描述

2.6.8 查看Nifi集群

  nifi集群启动好之后,可以通过各个节点的ip:port访问nifi.web.http.host和nifi.web.http.port。nifi三台节点连接后,常用模块会出现一个图标,可以看出有三个节点。

在这里插入图片描述

  通过cluster可以查看三个集群状态。

在这里插入图片描述

2.7 故障排除

  如果在集群启动或运行期间出现问题,可通过logs目录下的nifi-app.lognifi-user.log排查,使用tail -f nifi-app.log可以帮你实时打印日志到控制台。nifi默认打印日志级别是info,这样获取对你查看日志没有帮助,可以通过修改conf目录下的logback.xml文件,并将日志级别更改为DEBUG

  在集群的各个节点,修改name="org.apache.nifi.web.api.config"的日志级别。

<logger name="org.apache.nifi.web.api.config" level="INFO" additivity="false">
    <appender-ref ref="USER_FILE"/>
</logger>

2.8 管理节点

2.8.1 断开节点

  DFM可以手动断开集群中的连接。节点也会因为网络或其他原因导致缺乏心跳而被断开节点。手动点击断开节点图标,断开连接的节点可以连接,卸载或删除

在这里插入图片描述

2.8.2 卸载节点

  当选择卸载节点后,该节点的流文件会重新平衡到活动中的其他节点。卸载节点后,连接和删除图标可能不会立即出现,刷新一下即可。如果因为内存或网络等问题而卸载节点的,可以重新连接到集群或将该节点删除。

在这里插入图片描述

2.8.3 删除节点

  DFM如果希望删除该节点,那么在卸载后可以单机卸载图标。删除后该节点就会从集群中退出,除非重新启动该节点,否则无法通过webUI将该节点加入集群中。

在这里插入图片描述

3.8.4 退役节点

  经过断开节点、卸载节点、删除节点后,在控制台停止该节点的nifi服务,就正式完成了退役节点。

# 通过netstat -nltp | grep port命令
# 可以看到删除的节点还在运行
[root@zxy_slave1 bin]# netstat -nltp | grep 58085
tcp        0      0 0.0.0.0:58085            0.0.0.0:*               LISTEN      13437/java
[root@zxy_slave1 bin]# ./nifi.sh stop

Java home: /zxy/apps/jdk1.8.0_311
NiFi home: /zxy/apps/nifi02

Bootstrap Config File: /zxy/apps/nifi02/conf/bootstrap.conf

2.8.5 重启节点

  已退役的节点,如果需要重新加入集群,重启该节点即可。如果是新加入的节点,那么就需要修改配置文件。

[root@zxy_slave1 bin]# ./nifi.sh start

Java home: /zxy/apps/jdk1.8.0_311
NiFi home: /zxy/apps/nifi02

Bootstrap Config File: /zxy/apps/nifi02/conf/bootstrap.conf

在这里插入图片描述

2.9 流动选举

  集群启动的时候,Nifi需要确定哪个节点具有正确的流信息。这是通过节点之间投票完成的,当节点尝试连接到集群时,他会将其本地流的副本flow.xml.gz提供给集群协调器。如果还未选择正确的流信息,那么会将该节点的流与每个节点流进行比较。每个节点对自己一样的流投票,如果没有相同的流,那么这一票会投给可能选择的流池中。如果投票时间到了,或者某个flow.xml.gz已经达到票数,则选出一个正确的flow.xml.gz。而与正确的flow.xml.gz不一致的节点会自动挂掉,如果想要加入集群,需要删除该节点的flow.xml.gz并重启。

3 Nifi迁移

3.1 单节点迁移

3.1.1 前言

  当前有两台单机部署的nifi分别是nifi01和nifi02,其中nifi01是新的nifi实例,nifi02上有流程任务。想要把nifi02的任务流程迁移到nifi01上。

[root@zxy_slave1 apps]# ls | grep nifi
nifi01
nifi02

Nifi01

[root@zxy_slave1 apps]# cd nifi01/bin/
[root@zxy_slave1 bin]# ./nifi.sh start

Java home: /zxy/apps/jdk1.8.0_311
NiFi home: /zxy/apps/nifi01

Bootstrap Config File: /zxy/apps/nifi01/conf/bootstrap.conf

在这里插入图片描述

Nifi02

[root@zxy_slave1 apps]# cd nifi02/bin/

[root@zxy_slave1 bin]# ./nifi.sh start

Java home: /zxy/apps/jdk1.8.0_311
NiFi home: /zxy/apps/nifi02

Bootstrap Config File: /zxy/apps/nifi02/conf/bootstrap.conf

在这里插入图片描述

3.1.2 迁移

  flow.xml.gz: DFM所有操作内容都会实时的记录到一个名为flow.xml.gz的配置文件中。该文件默认保存在nifi目录下的conf目录中。在画布中进行的任何更改都会自动保存到本文件中,无需额外保存操作。此外,nifi在更新时会自动在归档目录中创建此文件的备份副本。可以使用这些归档文件来回滚配置,如果想要回滚,先停止nifi,将flow.xml.gz替换为所需要的备份副本,然后重新启动nifi。在集群环境中,停止整个nifi集群,替换其中一个节点的flow.xml.gz,删除其他节点的flow.xml.gz,然后重新启动该节点。确认此节点启动为单节点集群后,然后启动其他节点。替换的流配置将在集群中同步。flow.xml.gz的名称和位置以及自动存档行为是可配置的。

# 1.删除nifi01的flow.xml.gz文件
[root@zxy_slave1 apps]# rm -f ./nifi01/conf/flow.xml.gz
# 2.查看
[root@zxy_slave1 apps]# ls ./nifi01/conf/
archive          bootstrap.conf                       logback.xml                   nifi.properties       zookeeper.properties
authorizers.xml  bootstrap-notification-services.xml  login-identity-providers.xml  state-management.xml
# 3.复制flow.xml.gz文件到nifi01
[root@zxy_slave1 apps]# cp ./nifi02/conf/flow.xml.gz ./nifi01/conf/
# 4.查看
[root@zxy_slave1 apps]# ls ./nifi01/conf/
archive          bootstrap.conf                       flow.xml.gz  login-identity-providers.xml  state-management.xml
authorizers.xml  bootstrap-notification-services.xml  logback.xml  nifi.properties               zookeeper.properties


3.1.3 Nifi01实例

[root@zxy_slave1 apps]# cd ./nifi01/bin

[root@zxy_slave1 bin]# ./nifi.sh start

Java home: /zxy/apps/jdk1.8.0_311
NiFi home: /zxy/apps/nifi01

Bootstrap Config File: /zxy/apps/nifi01/conf/bootstrap.conf

在这里插入图片描述

3.2 集群节点迁移

3.2.1 前言

  从单实例nifi的conf文件中获取flow.xml.gz文件,我希望将这个nifi实例上的流数据信息迁移到当前的nifi集群中。

[root@zxy_slave1 apps]# ls | grep flow.xml.gz
flow.xml.gz

[root@zxy_slave1 apps]# ls | grep nifi0
nifi01
nifi02
nifi03

3.2.2 迁移

暂停各个节点

在这里插入图片描述

将准备好的flow.xml.gz文件复制到nifi01节点的conf目录下,删除nifi02,nifi03的conf目录下的flow.xml.gz

在这里插入图片描述

3.2.3 Nifi集群

重新启动集群各个节点

在这里插入图片描述

启动后,发现已经将flow.xml.gz迁移到集群中

在这里插入图片描述

相关文章:

  • SQL server发布订阅事务复制新增表的解决方案(不重新初始化)
  • Tableau2——折线图,饼图
  • 对话腾讯天琴赵伟峰:当音乐与科技结合,会碰撞出怎样的火花?
  • codePen前端编码神器
  • Android 10.0 系统settings系统属性控制一级菜单显示隐藏
  • Linux多路I/O复用入门必读 -- epoll实现原理以及使用方法
  • systemverilog中的bind
  • 【视频】逆变换抽样将数据标准化和R语言结构化转换:BOX-COX、凸规则变换方法
  • 数说故事×IDEA荣获语言与智能技术竞赛「视频语义理解赛题」季军
  • 30岁生日收到公司的生日礼物,一份裁员通知,有人从此一蹶不振,而我逆风翻盘,重获新生~
  • PIE-Engine APP:广东省生态遥感指数研究
  • 学好大数据能做什么工作?
  • 谷粒学院16万字笔记+1600张配图(十三)——搭建前台环境、首页数据显示
  • vue 向 docx模板中填充数据生成目标docx 文件
  • 内卷时代,扫地机器人何时能成为刚需?
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Apache的基本使用
  • Cumulo 的 ClojureScript 模块已经成型
  • Javascript弹出层-初探
  • JavaScript类型识别
  • Js基础知识(一) - 变量
  • Laravel 菜鸟晋级之路
  • Sass Day-01
  • Vue 2.3、2.4 知识点小结
  • vue-router 实现分析
  • Vultr 教程目录
  • 构建二叉树进行数值数组的去重及优化
  • 关于springcloud Gateway中的限流
  • 免费小说阅读小程序
  • 使用docker-compose进行多节点部署
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 用jQuery怎么做到前后端分离
  • 7行Python代码的人脸识别
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 阿里云ACE认证学习知识点梳理
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (小白学Java)Java简介和基本配置
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .cn根服务器被攻击之后
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 发展历程
  • :not(:first-child)和:not(:last-child)的用法
  • @AutoConfigurationPackage的使用
  • @EnableAsync和@Async开始异步任务支持
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • @我的前任是个极品 微博分析
  • @在php中起什么作用?