1 简介
NiFi是一个易用、可靠、功能强大的数据处理与分发系统,是Apache的开源项目。只需在web界面中用拖拽的方式定义数据处理节点,数据处理流程和配置相关参数,NiFi即可自动完成复杂的数据处理任务,非常方便。
这里介绍NiFi 1.8.0的安装和启动方法。
2 安装
NiFi的安装使用非常简单,只需配置好JAVA环境,将官网上下载的NiFi二进制包解压,然后进入bin目录,执行./nifi.sh start
,即可启动NiFi。
当然,这种方式运行的是单机版的NiFi,如果要进行分布式安装,还需要进行其他一些配置。
分布式的NiFi需要使用Zookeeper作为集群的管理工具,NiFi本身内置了Zookeeeper,也可以使用独立安装的Zookeeper。
2.1 使用内置Zookeeper
对每一个节点完成以下配置(建议在一个节点配置好,复制到其他节点再稍作修改)
① 修改conf/zookeeper.properties
clientPort=2181
initLimit=10
autopurge.purgeInterval=24
syncLimit=5
tickTime=2000
dataDir=./state/zookeeper
autopurge.snapRetainCount=30
#
# Specifies the servers that are part of this zookeeper ensemble. For
# every NiFi instance running an embedded zookeeper, there needs to be
# a server entry below. For instance:
#
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
#
最后三行根据集群的实际情况修改
② 在state/zookeeper文件夹下新建myid文件,写入节点编号
mkdir state
mkdir state/zookeeper
echo 1 > state/zookeeper/myid
不同节点写入的标号不同,要与第一步中的server编号对应
③ 修改conf/nifi.properties
#是否启动内置的zk
nifi.state.management.embedded.zookeeper.start=true
#配置zk节点
nifi.zookeeper.connect.string=master:2181,slave1:2181,slave2:2181
#这里配置为非安全性的nifi
nifi.cluster.protocol.is.secure=false
nifi.cluster.is.node=true
nifi.cluster.node.address=master
nifi.cluster.node.protocol.port=11443
nifi.cluster.node.protocol.threads=10
nifi.cluster.node.event.history.size=25
nifi.cluster.node.connection.timeout=5 sec
nifi.cluster.node.read.timeout=5 sec
nifi.cluster.firewall.file=
#各节点Site2Site协议接口配置
nifi.remote.input.host=master
nifi.remote.input.secure=false
nifi.remote.input.socket.port=10443
nifi.remote.input.http.enabled=true
nifi.remote.input.http.transaction.ttl=30 sec
#web ui
nifi.web.http.host=master
nifi.web.http.port=8080
其他节点需要根据实际情况修改host为节点的主机名(slave1,slave2等)
Slave1:
nifi.remote.input.host=slave1
nifi.web.http.host=slave1
nifi.cluster.node.address=slave1
Slave2:
nifi.remote.input.host=slave2
nifi.web.http.host=slave2
nifi.cluster.node.address=slave2
④ 修改conf/state-management.xml
<cluster-provider>
<id>zk-provider</id>
<class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class>
<property name="Connect String">master:2181,slave1:2181,slave2:2181</property>
<property name="Root Node">/nifi</property>
<property name="Session Timeout">10 seconds</property>
<property name="Access Control">Open</property>
</cluster-provider>
主要是修改Connect String
,和第三步中的nifi.zookeeper.connect.string
一致。
2.2 使用独立的Zookeeper
配置步骤比使用内置的Zookeeper方法要简单,对比来看:
① 无需修改conf/zookeeper.properties,保持默认配置即可。
(即无需定义server.1,server.2,server.3等条目)
② 无需在state/zookeeper文件夹下新建myid文件
③ 修改conf/nifi.properties
与使用内置的Zookeeper配置基本相同,不同的配置是:
#是否启动内置的zk
nifi.state.management.embedded.zookeeper.start=false
其他配置一致,按独立安装的Zookeeper实际情况填写。
④ 修改conf/state-management.xml
与使用内置的Zookeeper配置相同,按独立安装的Zookeeper实际情况填写。
3 启动
在每一个节点中执行命令:
nifi/bin/nifi.sh start
启动需要一定的时间,jps
查看NiFi进程是否成功启动:
2162 RunNiFi
2178 NiFi
1413 QuorumPeerMain
2330 Jps
从任意一个节点访问http://localhost:8080/nifi
即可访问NiFi主界面。(端口以配置文件中的为准)
4 关闭
在每一个节点中执行命令:
nifi/bin/nifi.sh stop
可能遇到的问题
端口冲突
若logs/nifi-bootstrap.log中出现“Address already in use”,则说明端口冲突,修改conf/nifi.properties中的nifi.web.http.port。NiFi的Web端口默认是8080,很容易与其他应用,建议修改。集群启动后,无法打开web页面
集群启动后,有一个选取主节点的过程,在此期间可能无法访问web页面或者提示与集群断开连接,等待一会儿后(5-8分钟)即可恢复正常。