天天看点

NiFi 单机和集群安装与使用

文章目录

    • 1. 简介
    • 2. 安装
      • 2.1 单机
        • 2.1.1 压缩包安装
        • 2.1.2 Docker安装
        • 2.1.3 测试
      • 2.2 伪集群
    • 3. Registry

1. 简介

NiFi就是为了解决不同系统间数据自动流通问题而建立的工具。

架构

NiFi 单机和集群安装与使用

核心概念

NiFi术语 描述
FlowFile 表示在系统中移动的每个对象,对于每个FlowFile,NIFI都会记录它一个属性键值对和0个或多个字节内容(有attribute和content)。
FlowFile Processor 在eip术语中,处理器就是不同系统间的数据路由,数据转换或者数据中介的组合。处理器可以访问给定FlowFile的属性及其内容。处理器可以对给定工作单元中的零或多个流文件进行操作,并提交该工作或回滚该工作。
Connection 连接处理器,充当队列并允许各种进程以不同的速率进行交互。这些队列可以动态地对进行优先级排序,并且可以在负载上设置上限,从而启用背压。
Flow Controller 流控制器维护流程如何连接,并管理和分配所有流程使用的线程。流控制器充当代理,促进处理器之间流文件的交换。
Process Group 进程组里是一组特定的流程和连接,可以通过输入端口接收数据并通过输出端口发送数据,这样我们在进程组里简单地组合组件,就可以得到一个全新功能的组件。

集群

NiFi 单机和集群安装与使用

NIFI集群采用了Zero-Master Clustering(零主集群)模式。NiFi群集中的每个节点对数据执行相同的任务,但每个节点都在不同的数据集上运行。Apache ZooKeeper选择单个节点作为集群协调器,ZooKeeper自动处理故障转移。所有集群节点都会向集群协调器发送心跳报告和状态信息。集群协调器负责断开和连接节点。此外,每个集群都有一个主节点,主节点也是由ZooKeeper选举产生。我们可以通过任何节点的用户界面(UI)与NiFi群集进行交互,并且我们所做的任何更改都将复制到集群中的所有节点上。

NiFi术语 描述
Nodes 每个集群由一个或多个节点组成,节点执行实际的数据处理。
NiFi Cluster Coordinator 由Zookeeper选举,集群协调器是NiFi集群中的节点,负责执行任务和管理集群中的节点,管理节点扩充,同步节点的操作到所有节点。
Primary Node 由Zookeeper选举,每个集群都有一个主节点。在此节点上,可以运行"隔离处理器"。如果该节点由于任何原因断开与集群的连接,将自动选择新的主节点。默认相同的数据流在所有节点上运行。有的数据流不希望在所有的节点上运行,就可以设置主节点,只在主节点上运行。
Isolated Processors 隔离处理器,在NiFi集群中,相同的数据流在所有节点上运行。因此,流中的每个组件都在每个节点上运行。但是,可能存在DFM不希望每个处理器在每个节点上运行的情况。在处理器中选择在 All Node 还是 Primary Node 执行,All Node 会在所有节点上运行,Primary Node 只会在主节点运行。
Heartbeats 节点通过"心跳"将其健康状况和状态传达给当前选定的集群协调器,这使协调器知道它们仍然连接到集群并正常工作。默认情况下,节点每5秒发出一次心跳,如果集群协调器在40秒内没有从节点收到心跳,则由于"缺乏心跳"而断开节点。

2. 安装

2.1 单机

2.1.1 压缩包安装

NiFi官网下载

mkdir /usr/local/softwares/nifi
tar -zxvf nifi-1.10.0-bin.tar.gz -C /usr/local/softwares/nifi
           

可在

conf/nifi.properties

修改端口,原8080

后台启动

./bin/nifi.sh start
           

访问

ip:8080/nifi

2.1.2 Docker安装

docker run --name nifi \
  -p 9090:9090 \
  -d \
  -e NIFI_WEB_HTTP_PORT='9090' \
  apache/nifi:latest
           

2.1.3 测试

移动文件测试

NiFi 单机和集群安装与使用

修改GetFile中的Input Directory属性,使用相对地址的话是相对NiFi安装目录

NiFi 单机和集群安装与使用

修改GetFile的调用时间为60秒,默认0秒

NiFi 单机和集群安装与使用

修改PutFile中的Directory属性

NiFi 单机和集群安装与使用

两个组件相连,当GetFile是success时,才回到PutFile

NiFi 单机和集群安装与使用

PutFile是最后一个组件,需要设置自动终止关系。

同理,如果上一个组件还有其他没配置的关系,也有勾上自动终止,否则没法启动该组件。

NiFi 单机和集群安装与使用

启动前from和to文件夹:

NiFi 单机和集群安装与使用

启动NiFi移动文件

NiFi 单机和集群安装与使用

2.2 伪集群

伪集群,创建nifi-cluster文件夹,在一台虚拟机上启动3个NiFi实例,组成集群。

这里使用外部Zookeeper,Zookeeper 单机及集群安装

复制单机版安装包,修改conf/nifi.properties,注意三个端口

# HTTP主机和端口
nifi.web.http.host=192.168.110.40
nifi.web.http.port=9101

# 实例是群集中的节点,节点地址和端口
nifi.cluster.is.node=true
nifi.cluster.node.address=192.168.110.40
nifi.cluster.node.protocol.port=9111

# 选举时间和候选节点数
nifi.cluster.flow.election.max.wait.time=1 mins
nifi.cluster.flow.election.max.candidates=1

# 负载均衡端口
nifi.cluster.load.balance.port=9121

# zookeeper地址
nifi.zookeeper.connect.string=192.168.110.40:2181,192.168.110.40:2281,192.168.110.40:2381
           

修改conf/state-management.xml,添加Zookeeper地址

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

再复制两份,注意修改conf/nifi.properties中的端口。

在集群文件夹新增启动脚本,方便快速启动。停止脚本类似,命令改为stop。

vi start-all.sh
           
cd nifi-1
./bin/nifi.sh start
cd ..
cd nifi-2
./bin/nifi.sh start
cd ..
cd nifi-3
./bin/nifi.sh start
           
chmod u+x start-all.sh
           

运行start-all.sh,启动NiFi集群

可看到9101为主节点和集群协调器

NiFi 单机和集群安装与使用

一般会将首个处理器设置为在主节点运行。

如果不设置,那么首个处理器就会执行多次。这里有三个节点,所以会执行三次,执行后的数据在不同节点上,后面的流程也都在不同节点上运行。

如果设置了在首节点运行,并且下一个连接设置为负载均衡(大部分用轮询)。那么首个处理器只在首节点运行,数据也会被负载均衡到不同节点上,后面的流程也都在不同节点上运行。

NiFi 单机和集群安装与使用

FlowFile在集群下会有一个属性Node Address,表示该FlowFile所在的节点地址。

NiFi 单机和集群安装与使用

3. Registry

Registry 是 Apache NiFi 的一个子项目,用于存储和管理共享资源,实现版本控制。

下载并解压,后台启动

./bin/nifi-registry.sh start
           

访问

ip:18080/nifi-registry

创建一个Bucket,然后配置Registry的地址,即可对组开启版本控制。详见Apache NiFi Registry 入门

参考:

NiFi官网 quickstart

NiFi官网文档

【NIFI】 Apache NiFI 集群搭建

Apache NIFI中文文档

Apache NiFi Registry

继续阅读