Apache NiFi社区于2024年11月初正式发布了NiFi 2.0版本。本文所说的“快速部署”特指Nifi单节点模式的安装与配置,而非多节点集群部署。基于实际操作经验,尽管单节点部署无法提供分布式架构带来的高可用性和可扩展性优势,但凭借NiFi卓越的并行处理能力和稳健的数据流传输设计,单节点模式仍能在生产环境中高效支持每日数十亿乃至数百亿级别的数据同步及转换任务。本文将详细介绍如何在单节点环境下快速部署NiFi 2.0版本。
Nifi 2.0 快速部署可以分为以下几个步骤:
(1)环境和介质包准备
(2)JDK配置
(3)TLS证书生成与配置
(4)Nifi用户配置
(5)其他Nifi配置
(6)执行启动、停止等命令
(7)访问Nifi Web
值得一提的是,NiFi 2.0版本的部署流程与NiFi 1.x系列版本(当前最新版本为1.28.1)基本一致。对于NiFi 1.x版本而言,无需重新生成TLS证书,除此之外,您可以直接参考本文档中提供的步骤进行部署。
1.准备好部署服务器环境
在本文,我们配置了一台CentOS 7服务器,服务器的规格为8核CPU、16GB内存及80GB磁盘空间。实际部署时所需的具体硬件配置应基于NiFi任务的实际需求来确定。然而,为了保证系统的稳定性和性能,建议最低配置不应低于4核CPU、8GB内存以及40GB磁盘空间。值得注意的是,Apache NiFi作为一个采用Java开发的平台,完全支持在Windows操作系统上进行部署。相较于Linux环境下的部署,在Windows系统中启动、停止等操作需通过使用nifi.cmd脚本来完成。基于笔者实践经验,在多个涉及老旧信息系统数据采集与处理的项目中,NiFi也完全具备能够在Windows平台上以单节点或集群模式稳定运行的能力。
准备的服务器如下:
10.0.0.11 hadoop102
随后,在服务器上创建路径为 /home/nifi
的目录,作为NiFi软件的安装位置。
2.准备Nifi 2.0.0的部署介质包
Nifi 2.0.0的介质包如下:(1)nifi-2.0.0-bin.zip
此文件为Nifi 2.0.0版本的主程序包。Nifi集群采用去中心化架构设计,要求在每个节点上部署一致的Nifi服务实例。nifi-2.0.0-bin.zip即为此所需的服务主程序包。
(2)nifi-toolkit-2.0.0-bin.zip(可选)
Nifi-Toolkit(https://nifi.apache.org/nifi-docs/toolkit-guide.html)可以为部署的Nifi服务以命令行的方式提供Nifi服务管理、任务运维等功能。
(3)nifi-toolkit-1.28.1-bin.zip(可选)
Nifi-Toolkit 1.28.1 (https://nifi.apache.org/docs/nifi-docs/html/toolkit-guide.html)是Nifi 1.x版本的运维工具,在Nifi升级到2.0版本后,剔除了很多社区认为没必要维护的运维功能,尤其是为Nifi快速生成TLS证书的功能,本文依然还是采用Nifi-Toolkit 1.x进行Nifi TLS证书的生成。
3.解压介质包
介质包下载地址:
清华镜像:https://mirrors.tuna.tsinghua.edu.cn/apache/nifi/
将介质包解压放到服务器的/home/nifi目录下。
二 JDK配置
为了确保NiFi 2.0能够正常运行,建议使用JDK 21或更高版本。若要满足此需求,您可以选择直接将服务器的JAVA_HOME环境变量设置为指向JDK 21的路径。对于那些不希望更改服务器级JAVA_HOME环境变量配置的情况,可以通过调整`nifi.sh`启动脚本来指定JDK版本,具体操作如下所示: ** 注意**:如果您的系统已经全局设置了JAVA_HOME指向JDK 21,则无需执行以下步骤1和2。1.增加NIFI_JAVA_HOME 环境变量
#在profile文件中增加NIFI_JAVA_HOME
[root@hadoop102 conf]# vim /etc/profile
export NIFI_JAVA_HOME=/usr/local/jdk-21.0.5
#然后执行source,让修改的profile生效
[root@hadoop102 conf]# source /etc/profile
2.修改nifi.sh启动脚本
[root@hadoop102 conf]# vim /home/nifi/nifi-2.0.0/bin/nifi.sh
# 将nifi.sh中所有的${JAVA_HOME}替换成${NIFI_JAVA_HOME}
locateJava() {
# Setup the Java Virtual Machine
if $cygwin ; then
[ -n "${JAVA}" ] && JAVA=$(cygpath --unix "${JAVA}")
[ -n "${JAVA_HOME}" ] && JAVA_HOME=$(cygpath --unix "${JAVA_HOME}")
fi
if [ "x${JAVA}" = "x" ] && [ -r /etc/gentoo-release ] ; then
JAVA_HOME=$(java-config --jre-home)
fi
if [ "x${JAVA}" = "x" ]; then
if [ "x${JAVA_HOME}" != "x" ]; then
if [ ! -d "${JAVA_HOME}" ]; then
die "JAVA_HOME is not valid: ${JAVA_HOME}"
fi
JAVA="${JAVA_HOME}/bin/java"
else
warn "JAVA_HOME not set; results may vary"
JAVA=$(type java)
JAVA=$(expr "${JAVA}" : '.* \(/.*\)$')
if [ "x${JAVA}" = "x" ]; then
die "java command not found"
fi
fi
fi
}
echo "JAVA_HOME=${JAVA_HOME}"
#改为
locateJava() {
# Setup the Java Virtual Machine
if $cygwin ; then
[ -n "${JAVA}" ] && JAVA=$(cygpath --unix "${JAVA}")
[ -n "${NIFI_JAVA_HOME}" ] && NIFI_JAVA_HOME=$(cygpath --unix "${NIFI_JAVA_HOME}")
fi
if [ "x${JAVA}" = "x" ] && [ -r /etc/gentoo-release ] ; then
NIFI_JAVA_HOME=$(java-config --jre-home)
fi
if [ "x${JAVA}" = "x" ]; then
if [ "x${NIFI_JAVA_HOME}" != "x" ]; then
if [ ! -d "${NIFI_JAVA_HOME}" ]; then
die "NIFI_JAVA_HOME is not valid: ${NIFI_JAVA_HOME}"
fi
JAVA="${NIFI_JAVA_HOME}/bin/java"
else
warn "NIFI_JAVA_HOME not set; results may vary"
JAVA=$(type java)
JAVA=$(expr "${JAVA}" : '.* \(/.*\)$')
if [ "x${JAVA}" = "x" ]; then
die "java command not found"
fi
fi
fi
}
echo "NIFI_JAVA_HOME=${NIFI_JAVA_HOME}"
三 TLS证书生成与配置
无论是用户访问NiFi Web UI界面,还是各NiFi服务节点间的通信,均需依赖于传输层安全(TLS)协议。因此,在启动NiFi之前,必须完成对TLS证书的配置工作。值得注意的是,NiFi支持多种TLS证书配置方案,以满足不同的安全需求与环境要求。(https://nifi.apache.org/nifi-docs/administration-guide.html#security_configuration)。
在NiFi 1.x版本中,NiFi Toolkit提供了一种用于快速配置TLS证书的命令行工具,能够高效地生成JKS格式的证书(JKS是TLS证书的一种存储格式)。本文将继续利用NiFi 1.x版本中的NiFi Toolkit工具来生成TLS证书,并完成对NiFi配置文件的相关设置。如果您对TLS证书的生成比较了解,也可以不通过Nifi Toolkit自行生成TLS证书并配置nifi.properties。另外,您完全也可以采用PKCS12或BCFKS TLS证书格式进行配置。
在NiFi 1.x系列版本中,使用默认的证书和配置即可正常启动和访问Nifi服务。然而,自NiFi 2.0版本起,为了进一步增强系统的安全性,官方要求为部署NiFi服务的服务器生成并配置TLS证书。尽管如此,在用户选择于本地环境进行开发或测试,并且仅限于通过本机访问该服务的情况下,可以考虑跳过这一证书配置步骤。
1.用Nifi-Toolkit生成证书和nifi.properties
请在每台服务器下用nifi-toolkit生成TLS证书和nifi.properties#在本文示例的hadoop102机子上执行
[root@hadoop102 conf]# sh /home/nifi/nifi-toolkit-1.28.1/bin/tls-toolkit.sh standalone -O -n 'hadoop102' -C 'CN=hadoop102,OU=NIFI' -K 123456789012K -S 123456789012K -P 123456789012K -o '/home/nifi/tls'
NiFi Toolkit具体参数请参考 https://nifi.apache.org/docs/nifi-docs/html/toolkit-guide.html#tls_toolkit
2.将生成出来的JKS证书拷贝到nifi conf目录下
请将生成的证书文件复制到NiFi安装目录下的配置文件夹中,具体路径为`/home/nifi/nifi-2.0.0/conf/`。[root@hadoop102 conf]# cp -rf /home/nifi/tls/hadoop102/*.jks root@hadoop102:/home/nifi/nifi-2.0.0/conf/
确认Nifi conf目录下都有keystore.jks和truststore.jks。
3.将生成出来的nifi.properties TLS相关部分替换到conf/nifi.properties相关配置
[root@hadoop102 conf]# vim /home/nifi/tls/hadoop102/nifi.properties
#拷贝如下配置
nifi.security.autoreload.enabled=false
nifi.security.autoreload.interval=10 secs
nifi.security.keystore=./conf/keystore.jks
nifi.security.keystoreType=jks
nifi.security.keystorePasswd=123456789012K
nifi.security.keyPasswd=123456789012K
nifi.security.truststore=./conf/truststore.jks
nifi.security.truststoreType=jks
nifi.security.truststorePasswd=123456789012K
nifi.security.user.authorizer=single-user-authorizer
nifi.security.allow.anonymous.authentication=false
nifi.security.user.login.identity.provider=single-user-provider
nifi.security.user.jws.key.rotation.period=PT1H
nifi.security.ocsp.responder.url=
nifi.security.ocsp.responder.certificate=
#替换nifi-2.0.0/conf下nifi.properties相关配置
[root@hadoop102 conf]# vim /home/nifi/nifi-2.0.0/conf/nifi.properties
四 Nifi认证配置
在访问NiFi用户界面进行操作之前,用户需首先通过身份验证。此过程要求用户提供有效的凭据(如用户名和密码)。NiFi支持配置多种认证机制,特别是能够集成外部第三方统一认证服务,例如OpenID、LDAP以及Kerberos等,以满足不同安全需求。具体参考https://nifi.apache.org/nifi-docs/administration-guide.html#user_authentication。
若需采用OpenID、Kerberos等认证机制,必须额外部署相应的认证服务或者提供已有的服务。为了简化部署流程,NiFi提供了一种更为直接的认证选项——单用户(Single User)模式。本文将着重介绍如何配置单用户模式下的认证设置。对于其他认证方法的具体实施,请参阅官方文档以获取详细指导。
本文采用的是Nifi默认配置的Single User 模式进行登录认证。
在NiFi安装目录中,请执行以下命令以创建当前节点的用户名和密码。其中,username
将作为登录NiFi Web用户界面时使用的身份标识,而password
则为其对应的认证密钥。请确保在配置完成后妥善保存这些凭据。
[root@hadoop102 bin]# /home/nifi/nifi-2.0.0/bin/nifi.sh set-single-user-credentials username password
五 其他Nifi配置
在每个NiFi配置文件`nifi.properties`中进行以下设置:# nifi web ui的访问域名
nifi.web.https.host=hadoop102
# nifi的访问端口号
nifi.web.https.port=9443
# 敏感信息加密密钥
nifi.sensitive.props.key=123456789012K
六 启动、停止等命令
Nifi为用户提供了服务管理的脚本,脚本位于bin目录下,Liunx系统脚本为nifi.sh,Windows系统脚本为nifi.cmd。具体参照 https://nifi.apache.org/nifi-docs/administration-guide.html#how-to-install-and-start-nifi。
#启动Nifi
[root@hadoop102 bin]# /home/nifi/nifi-2.0.0/bin/nifi.sh start
#停止Nifi
[root@hadoop102 bin]# /home/nifi/nifi-2.0.0/bin/nifi.sh stop
#查看Nifi节点状态
[root@hadoop102 bin]# /home/nifi/nifi-2.0.0/bin/nifi.sh status
....
除开启动、停止等操作,查看Nifi运行日志也经常用到,尤其是Nifi集群部署完后如果无法正常运行,首先要查看Nifi运行的错误日志,根据日志来判断是哪里部署错误了,查看日志命令如下:
#查看nifi日志
[root@hadoop102 bin]# tail -200f /home/nifi/nifi-2.0.0/logs/nifi-app.log
七 访问Nifi Web
在NiFi成功启动后,您可以使用先前配置的用户名和密码访问NiFi Web界面,以便进行数据流任务的创建与管理。NiFi Web界面可通过如下URL访问:`https://:/nifi`,其中``与``应根据`nifi.properties`文件中的具体设置来确定。Nifi登录界面如下:
如果一切顺利,登录成功后,您将看到Nifi Web主界面如下: