nifi 单节点部署踩坑总结

nifi简介

使用:流数据处理平台,丰富的处理器,一周内有更新代码、文档丰富有中文版

优点:

  • 可视化编排:拖拽式流程设计,无需编码即可完成大多数 ETL 操作。

  • 实时流处理:支持增量数据处理(如 QueryDatabaseTable 监听新增数据)。

  • 扩展性:支持自定义处理器(Java)或脚本(Python/Groovy)。

  • 容错机制:自动重试、背压控制、数据溯源(Provenance)。

缺点:

  • 复杂计算:窗口聚合、多流 JOIN 等需配合外部工具(如 Spark)。

  • 大数据量批处理:单节点性能有限,超大规模数据建议分流到 Hadoop 或 Flink。

总结:

NiFi 能够满足绝大多数数据清洗和转换需求,尤其适合,

  • 实时或微批处理场景。

  • 需要快速原型设计的 ETL 流程。

  • 与异构系统(数据库、API、消息队列)集成的场景。

对于超大规模数据或复杂计算,可将 NiFi 作为数据接入层,搭配 Spark/Flink 进行后续处理

版本环境问题

环境要求:nifi1要求java8或11,nifi2要求java21

目前服务器和windows系统的java版本都很低,只能部署使用nifi1.x,流数据处理只支持python2.x或者走命令行运行脚本。

镜像部署,nifi2.4.0镜像自带java,支持python3。

docker pull apache/nifi:2.4.0

安装包直接部署

Windows安装

双击启动bin/run-nifi.bat,一定要ctrilC关闭,启动后web访问NiFi Flow

Linux安装步骤

1、设置java环境变量,修改配置文件nifi.web.https.host=服务器地址,注意端口号是8443

2、设置用户名和密码: bin/nifi.sh set-single-user-credentials admin coreiod123456

3、后台启动nifi: bin/nifi.sh start

4、验证:进程查看ps -ef | grep nifi,端口使用查看 ss -tulnp | grep 8443

nifi2.4.0docker 部署

部署尝试:

1、HTTP8080部署,尝试失败,系统默认使用https部署

2、HTTPS8443部署,容器运行正常但是访问总是error 400 invalid sni。

3、尝试(1)配置文件挂载(amount 冲突),(2)在原镜像基础上重新打镜像、把修改好的配置文件进行挂载,重打镜像启动.sh文件会找不到,(3)生成证书,外部挂载、修改环境变量,部分环境变量修改无法生效。

总结:上面的问题主要是因为NiFi 官方镜像的一个“坑”:其 ENTRYPOINT 脚本(/opt/nifi/scripts/start.sh)会在容器启动时自动检测并修改配置文件(如nifi.properties),可以通过环境变量修改部分配置,但是要确定你使用的环境变量名是对的,然后配置文件确定修改了。如果你挂载了自定义配置,这种自动修改往往会导致“Device or resource busy”或配置被覆盖。具体解决参考nifi集群部署。

docker run -d \
  --name nifi-2.4.0 \
  -p 8443:8443 \
  -e NIFI_WEB_HTTPS_HOST=0.0.0.0 \
  -e NIFI_WEB_HTTPS_PORT=8443 \
  -e NIFI_SENSITIVE_PROPS_KEY=Sec@xxxxxxxxx \
  -e TZ=Asia/Shanghai \
  -v <pwd>/nifi-data:/opt/nifi/nifi-current/database \
  -v <pwd>/nifi-log:/opt/nifi/nifi-current/log \
  apache/nifi:2.4.0
​

在启动nifi2.4.0镜像后,容器运行正常但是访问总error 400 invalid sni

详细解决步骤

1. 进入 NiFi 容器

docker exec -it nifi-2.4.0 bash

2. 进入配置目录并备份/删除原有证书
cd /opt/nifi/nifi-current/conf
mv keystore.p12 keystore.p12.bak
mv truststore.p12 truststore.p12.bak
3. 生成新的 keystore 和 truststore

使用 keytool(推荐,官方支持)

生成 keystore.p12(将 CN 和 SAN 替换为你的实际 IP 或域名)

keytool -genkeypair -alias nifi-cert -keyalg RSA -keysize 2048 -validity 365 \
  -keystore keystore.p12 -storetype PKCS12 \
  -dname "CN=你的服务器IP, OU=Org, O=Company, L=City, S=State, C=CN" \
  -ext "SAN=IP:你的服务器IP"
  
 会要求你输入密码,我都用相同的:Sec@xxxxxxxxx

导出证书

keytool -exportcert -alias nifi-cert -file nifi-cert.crt -keystore keystore.p12 -storetype PKCS12

生成 truststore.p12

keytool -importcert -alias nifi-cert -file nifi-cert.crt -keystore truststore.p12 -storetype PKCS12
4. 修改 nifi.properties 配置

找到 nifi.properties 文件,确保如下配置项与你的实际 IP/域名和端口一致:

nifi.web.https.host=你的IP或域名
nifi.web.https.port=8443
nifi.security.keystore=./keystore.p12
nifi.security.keystoreType=PKCS12
nifi.security.keystorePasswd=你的keystore密码
nifi.security.keyPasswd=你的keystore密码
nifi.security.truststore=./truststore.p12
nifi.security.truststoreType=PKCS12
nifi.security.truststorePasswd=你的keystore密码
​
容器内没有vim等工具,可以使用sed修改:
sed -i 's|^nifi.security.keystorePasswd=.*|nifi.security.keystorePasswd=你的keystore密码|' nifi.properties
sed -i 's|^nifi.security.keyPasswd=.*|nifi.security.keyPasswd=你的keystore密码|' nifi.properties
sed -i 's|^nifi.security.truststorePasswd=.*|nifi.security.truststorePasswd=你的keystore密码|' nifi.properties

你的keystore密码,我都用了相同的:Sec@xxxxxxxxx

5. 重启 NiFi 容器
docker restart nifi
6. 访问测试

用浏览器访问 https://你的服务器IP:8443/nifi,应能正常打开 NiFi UI。

找用户名和密码,容器日志中查找Generated Username:

Generated Username [db7f1a89-bfd2-41ae-b5ce-xxxxxxxxxxxx]
Generated Password [4Fei/ZGR2woJTGF8nKxxxxxxxxxxxx]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值