NiFi就是为了解决不同系统间数据自动流通问题而建立的工具。
核心概念
NiFi术语 | 描述 |
---|---|
FlowFile | 表示在系统中移动的每个对象,对于每个FlowFile,NIFI都会记录它一个属性键值对和0个或多个字节内容(有attribute和content)。 |
FlowFile Processor | 在eip术语中,处理器就是不同系统间的数据路由,数据转换或者数据中介的组合。处理器可以访问给定FlowFile的属性及其内容。处理器可以对给定工作单元中的零或多个流文件进行操作,并提交该工作或回滚该工作。 |
Connection | 连接处理器,充当队列并允许各种进程以不同的速率进行交互。这些队列可以动态地对进行优先级排序,并且可以在负载上设置上限,从而启用背压。 |
Flow Controller | 流控制器维护流程如何连接,并管理和分配所有流程使用的线程。流控制器充当代理,促进处理器之间流文件的交换。 |
Process Group | 进程组里是一组特定的流程和连接,可以通过输入端口接收数据并通过输出端口发送数据,这样我们在进程组里简单地组合组件,就可以得到一个全新功能的组件。 |
集群
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秒内没有从节点收到心跳,则由于"缺乏心跳"而断开节点。 |
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
docker run --name nifi \
-p 9090:9090 \
-d \
-e NIFI_WEB_HTTP_PORT='9090' \
apache/nifi:latest
移动文件测试
修改GetFile中的Input Directory属性,使用相对地址的话是相对NiFi安装目录
修改GetFile的调用时间为60秒,默认0秒
修改PutFile中的Directory属性
两个组件相连,当GetFile是success时,才回到PutFile
PutFile是最后一个组件,需要设置自动终止关系。
同理,如果上一个组件还有其他没配置的关系,也有勾上自动终止,否则没法启动该组件。
启动前from和to文件夹:
启动NiFi移动文件
伪集群,创建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-providerid>
<class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProviderclass>
<property name="Connect String">192.168.110.40:2181,192.168.110.40:2281,192.168.110.40:2381property>
<property name="Root Node">/nifiproperty>
<property name="Session Timeout">10 secondsproperty>
<property name="Access Control">Openproperty>
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为主节点和集群协调器
一般会将首个处理器设置为在主节点运行。
如果不设置,那么首个处理器就会执行多次。这里有三个节点,所以会执行三次,执行后的数据在不同节点上,后面的流程也都在不同节点上运行。
如果设置了在首节点运行,并且下一个连接设置为负载均衡(大部分用轮询)。那么首个处理器只在首节点运行,数据也会被负载均衡到不同节点上,后面的流程也都在不同节点上运行。
FlowFile在集群下会有一个属性Node Address,表示该FlowFile所在的节点地址。
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