apache nifi 2.90部署+运维手册

Apache NiFi 2.9.0 部署手册

本文结合,手动部署 + AI总结,所有命令真实可用,绝非AI捏造未经验证,请放心食用


一、环境概览

项目 说明
操作系统 Linux(CentOS/RHEL 系)
服务器 IP 10.29.40.82
SSH 跳板机 10.180.116.100:2001(不能直连目标服务器 SSH)
JDK 版本 Dragonwell 21(路径 /app/jdk21)
NiFi 版本 2.9.0(路径 /app/nifi-2.9.0)
访问协议 HTTPS
HTTPS 端口 8443
内存配置 JVM Heap -Xms1g -Xmx1g

二、SSH 连接方式

目标服务器 10.29.40.82 不能直接 SSH,必须通过跳板机 10.180.116.100 的 2001 端口 跳转。

2.1 准备私钥

将 ssh.key 保存到本地,Windows 下需修复文件权限(SSH 不允许私钥被其他用户读取):

powershell 复制代码
# Windows PowerShell(管理员)
icacls "C:\path\to\ssh.key" /inheritance:r
icacls "C:\path\to\ssh.key" /grant:r "$env:USERNAME:R"

2.2 连接命令

bash 复制代码
ssh -i /path/to/ssh.key \
    -o StrictHostKeyChecking=no \
    -o UserKnownHostsFile=/dev/null \
    -p 2001 root@10.180.116.100

说明 :10.180.116.100:2001 实际是端口转发,登录后直接进入目标服务器 LXJS-imes-lz-ap02,用户为 root。

2.3 远程执行命令示例

bash 复制代码
# 查看 NiFi 进程
ssh -i ssh.key -p 2001 root@10.180.116.100 'ps -ef | grep nifi | grep -v grep'

# 查看日志
ssh -i ssh.key -p 2001 root@10.180.116.100 'tail -100 /app/nifi-2.9.0/logs/nifi-app.log'

三、目录结构

复制代码
/app/
├── jdk21/                    # Dragonwell JDK 21
└── nifi-2.9.0/               # NiFi 安装目录
    ├── bin/
    │   └── nifi.sh           # 启停脚本
    ├── conf/
    │   ├── nifi.properties    # 主配置文件
    │   ├── bootstrap.conf     # JVM 启动参数
    │   ├── login-identity-providers.xml  # 认证配置
    │   ├── keystore.p12       # HTTPS 证书(PKCS12)
    │   └── truststore.p12    # 信任库(PKCS12)
    ├── lib/
    ├── content_repository/    # 内容仓库(运行时自动创建)
    ├── flowfile_repository/   # FlowFile 仓库
    ├── provenance_repository/ # 数据溯源仓库
    └── logs/
        ├── nifi-app.log       # 应用主日志
        └── nifi-bootstrap.log # 启动引导日志

四、关键配置项

配置文件路径:/app/nifi-2.9.0/conf/nifi.properties

4.1 Web 访问配置

properties 复制代码
# HTTPS 绑定地址(0.0.0.0 表示监听所有网卡)
nifi.web.https.host=0.0.0.0
nifi.web.https.port=8443

# HTTP 端口留空表示禁用 HTTP
nifi.web.http.port=

# 代理主机(外部访问地址,含端口)
nifi.web.proxy.host=10.29.40.82:8443,localhost:8443,LXJS-imes-lz-ap02:8443

4.2 证书配置

properties 复制代码
nifi.security.keystore=./conf/keystore.p12
nifi.security.keystoreType=PKCS12
nifi.security.keystorePasswd=916bebe5988d8c259b12125f17534311

nifi.security.truststore=./conf/truststore.p12
nifi.security.truststoreType=PKCS12
nifi.security.truststorePasswd=4638380936819df293abb22aa11411b8

4.3 敏感属性密钥

properties 复制代码
# 用于加密 flow 中的敏感信息(密码等),至少 12 位
nifi.sensitive.props.key=g6%-kQKb4y^o+gbO

注意:此密钥一旦设置不要随意更改,否则已加密的 flow 敏感属性将无法解密。

4.4 JVM 内存配置

配置文件:/app/nifi-2.9.0/conf/bootstrap.conf

properties 复制代码
# 默认 1g,可根据服务器内存调整
java.arg.2=-Xms1g
java.arg.3=-Xmx1g

五、启停操作

执行前需设置 JAVA_HOME(非交互式 SSH 不会自动加载 /etc/profile.d/PATH.sh):

bash 复制代码
export JAVA_HOME=/app/jdk21
export PATH=$JAVA_HOME/bin:$PATH

5.1 启动

bash 复制代码
cd /app/nifi-2.9.0
./bin/nifi.sh start

5.2 停止

bash 复制代码
cd /app/nifi-2.9.0
./bin/nifi.sh stop

5.3 查看状态

bash 复制代码
./bin/nifi.sh status
ps -ef | grep org.apache.nifi.NiFi | grep -v grep

5.4 前台运行(调试用)

bash 复制代码
./bin/nifi.sh run

5.5 查看日志

bash 复制代码
# 实时跟踪应用日志
tail -f /app/nifi-2.9.0/logs/nifi-app.log

# 查看启动引导日志
tail -f /app/nifi-2.9.0/logs/nifi-bootstrap.log

六、首次登录

6.1 获取初始账号密码

NiFi 首次启动时会自动生成用户名和密码,记录在日志中:

bash 复制代码
grep "Generated" /app/nifi-2.9.0/logs/nifi-app.log

输出示例:

复制代码
Generated Username [656ba24e-538c-4554-b945-812e66235c94]
Generated Password [QPpTBIAb3z6JjpkGzN+6meMW1Lh/fBgf]

6.2 访问地址

复制代码
https://10.29.40.82:8443/nifi

自签名证书会提示不安全,点击"高级 → 继续前往"即可。

6.3 修改默认账号密码

bash 复制代码
cd /app/nifi-2.9.0
./bin/nifi.sh set-single-user-credentials <新用户名> <新密码>
# 然后重启
./bin/nifi.sh stop && ./bin/nifi.sh start

七、常见问题(FAQ)

Q1:访问报 HTTP ERROR 400 Invalid SNI

现象 :浏览器访问 https://10.29.40.82:8443/ 返回 400 Invalid SNI。

原因 :NiFi 2.x 使用 Jetty 10,自动生成的证书 SAN(Subject Alternative Name)中只有 localhost 和主机名,不包含 IP 地址。用 IP 访问时浏览器发送的 SNI 是 IP,服务器证书中没有该 IP,Jetty 直接拒绝。

解决方法:重新生成包含 IP 的证书。

bash 复制代码
export JAVA_HOME=/app/jdk21
export PATH=$JAVA_HOME/bin:$PATH
cd /app/nifi-2.9.0/conf

# 1. 备份旧证书
cp keystore.p12 keystore.p12.bak.$(date +%Y%m%d%H%M%S)
cp truststore.p12 truststore.p12.bak.$(date +%Y%m%d%H%M%S)

# 2. 删除旧 keystore,生成新证书(加入 IP SAN)
rm -f keystore.p12
keytool -genkeypair \
  -alias generated \
  -keyalg RSA -keysize 4096 -validity 3650 \
  -keystore keystore.p12 -storetype PKCS12 \
  -storepass 916bebe5988d8c259b12125f17534311 \
  -keypass 916bebe5988d8c259b12125f17534311 \
  -dname "CN=localhost, OU=NiFi, O=MyOrg, L=City, ST=State, C=CN" \
  -ext "SAN=DNS:localhost,DNS:LXJS-imes-lz-ap02,IP:10.29.40.82,IP:127.0.0.1"

# 3. 导出证书并重建 truststore
keytool -exportcert -alias generated \
  -keystore keystore.p12 -storetype PKCS12 \
  -storepass 916bebe5988d8c259b12125f17534311 \
  -file /tmp/nifi-cert.crt

rm -f truststore.p12
keytool -importcert -alias generated \
  -file /tmp/nifi-cert.crt \
  -keystore truststore.p12 -storetype PKCS12 \
  -storepass 4638380936819df293abb22aa11411b8 -noprompt

# 4. 重启 NiFi
cd /app/nifi-2.9.0
./bin/nifi.sh stop && ./bin/nifi.sh start

注意 :密码需与 nifi.properties 中 nifi.security.keystorePasswd 和 nifi.security.truststorePasswd 保持一致,否则无需改配置。


Q2:启动失败,提示 JAVA_HOME not set 或 java command not found

原因 :非交互式 SSH 登录不会加载 /etc/profile.d/PATH.sh,导致 java 不在 PATH 中。

解决方法:执行 NiFi 命令前手动设置环境变量:

bash 复制代码
export JAVA_HOME=/app/jdk21
export PATH=$JAVA_HOME/bin:$PATH

也可以在 nifi.sh 开头或 /etc/profile 中固化。


Q3:启动失败,日志报 Java 版本不兼容

现象 :UnsupportedClassVersionError 或类似错误。

原因 :NiFi 2.x 强制要求 Java 21,不支持 Java 8/11/17。

验证:

bash 复制代码
/app/jdk21/bin/java -version
# 应输出 openjdk version "21.x.x"

Q4:忘记登录密码怎么办

解决方法:重置单用户凭证后重启:

bash 复制代码
cd /app/nifi-2.9.0
./bin/nifi.sh set-single-user-credentials admin 你的新密码
./bin/nifi.sh stop && ./bin/nifi.sh start

Q5:启动后访问一直转圈或 502

排查步骤:

  1. 确认进程是否存活:ps -ef | grep nifi
  2. 查看 bootstrap 日志:tail -50 logs/nifi-bootstrap.log
  3. 查看应用日志是否有异常:tail -100 logs/nifi-app.log | grep -i error
  4. 确认端口监听:netstat -tlnp | grep 8443
  5. 首次启动需要 30~60 秒初始化,耐心等待

Q6:如何验证证书 SAN 是否包含 IP

bash 复制代码
/app/jdk21/bin/keytool -list -v \
  -keystore /app/nifi-2.9.0/conf/keystore.p12 \
  -storepass 916bebe5988d8c259b12125f17534311 \
  -storetype PKCS12 | grep -A5 "SubjectAlternativeName"

正常输出应包含:

复制代码
SubjectAlternativeName [
  DNSName: localhost
  DNSName: LXJS-imes-lz-ap02
  IPAddress: 10.29.40.82
  IPAddress: 127.0.0.1
]

Q7:磁盘空间不足

NiFi 的 content_repository 和 provenance_repository 会随数据量增长。查看磁盘:

bash 复制代码
df -h /app
du -sh /app/nifi-2.9.0/*_repository

可在 nifi.properties 中调整仓库容量阈值:

properties 复制代码
nifi.content.repository.archive.max.bytes=...
nifi.provenance.repository.max.storage.time=24 hours
nifi.provenance.repository.max.storage.size=1 GB

Q8:需要新增域名/IP 访问

如果后续需要通过其他域名或 IP 访问,重新生成证书时在 -ext "SAN=..." 中追加即可:

bash 复制代码
-ext "SAN=DNS:localhost,DNS:LXJS-imes-lz-ap02,IP:10.29.40.82,IP:127.0.0.1,DNS:nifi.example.com,IP:其他IP"

同时更新 nifi.web.proxy.host。


八、运维速查表

操作 命令
启动 cd /app/nifi-2.9.0 && ./bin/nifi.sh start
停止 ./bin/nifi.sh stop
重启 ./bin/nifi.sh stop && ./bin/nifi.sh start
查看状态 ./bin/nifi.sh status
实时日志 tail -f logs/nifi-app.log
查看进程 `ps -ef
查看端口 `netstat -tlnp
重置密码 ./bin/nifi.sh set-single-user-credentials <user> <pass>
登录地址 https://10.29.40.82:8443/nifi

九、备份建议

定期备份以下文件/目录:

备份项 路径 说明
配置文件 /app/nifi-2.9.0/conf/ nifi.properties、证书等
Flow 定义 /app/nifi-2.9.0/conf/flow.xml.gz 数据流编排(如有)
日志 /app/nifi-2.9.0/logs/ 按需归档

重要 :备份时请同时记录 nifi.sensitive.props.key 的值,否则换环境后无法解密 flow 中的敏感属性。

相关推荐
2603_965148111 小时前
终极清单:构建自动化选品比价系统的所有组件与资源
大数据·运维·数据库·数据挖掘·自动化
北城笑笑2 小时前
Server 18 ,Nginx 双服务器 HTTP转HTTPS 代理实战( HTTP 地址换 HTTPS 域名 )
运维·服务器·前端·后端·nginx·http·https
程序员-Benothing2 小时前
Linux磁盘IO性能分析:iostat、iotop、fio实战
linux·运维·服务器
言乐62 小时前
Python于LOLM针对伊泽瑞尔的数据分析
开发语言·python·机器学习·数据分析·pandas
LiaoWL1232 小时前
从零开始学 Linux(一):目录结构、常用命令与 VIM 编辑器上手
linux·运维·服务器
CNSSIRD数据库2 小时前
中国省地县乡四级行政建制及区划代码-2025年版
大数据·数据库·数据分析·论文笔记
我的愿望是成为富婆2 小时前
2027校招准备:普通本科数据相关专业,如何把考证、SQL与项目能力衔接起来?
大数据
重生之高冷汉堡包2 小时前
JavaScript 网络爬虫教程(2026)
大数据·网络·爬虫·安全
分布式存储与RustFS2 小时前
RustFS 上生产第一步:从单机到 4 节点多盘集群(MNMD)部署实操
运维·云原生·开源·对象存储·分布式存储·s3·性能基准