Apache NiFi 是一个易于使用、功能强大而且可靠的数据拉取、数据处理和分发系统,用于自动化管理系统间的数据流。它支持高度可配置的指示图的数据路由、转换和系统中介逻辑,支持从多种数据源动态拉取数据。NiFi原来是NSA(National Security Agency [美国国家安全局])的一个项目,目前已经代码开源,是Apache基金会的*项目之一。NiFi基于Web方式工作,后台在服务器上进行调度。用户可以为数据处理定义为一个流程,然后进行处理,后台具有数据处理引擎、任务调度等组件。
NIFI的优点
- 具有多种现有组件可以提供数据抽取转换流程
- 数据流可以在UI界面*拖拽和拓展,各模块之间相互独立,互不影响。
- 可视化的UI界面,各个模块组件之间高度可配置,且每个流程都有监控,可以通过界面直观的看到各个数据处理模块之间的数据流转情况,分析出程序性能瓶颈。
- 可以在处理耗时的地方创建多个处理模块并行执行,提升处理速度。类似于代码中加入了多线程,但相对于修改代码,界面配置操作十分简单。
- NiFi的对处理模块有对应的retry机制和错误分发机制,且可配置性强。
- NiFi基于组件的热插拔部署,方便集成自定义组件
- NiFi 可以进行集群部署,横向扩展,提高系统吞吐量
我计划研究一下,结果单机版安装时,用户认证出现了启动不起来、用户认证不通过等诸多问题,因此记录一下。
- 下载nifi 1.14版 和 nifi-toolkit-1.14.0-bin.tar.gz。apache NIFI下载页
- 解压缩nifi-1.14.0-bin.tar.gz 和 nifi-toolkit-1.14.0-bin.tar.gz
- 启用https步骤。1) cd nifi-toolkit-1.14.0\bin, 执行 tls-toolkit.bat standalone -n 'localhost' -C 'CN=Admin,OU=NIFI' -o 'target' 生成证书,如下图。keystore.jks 和truststore.jks是nifi运行使用,.p12文件是导入浏览器的CA认证管理器。
2)修改配置文件nifi-1.14.0\conf\nifi.properties, 或者将上一步生成的nifi.properties文件复制过去。重点是下面的属性。http和https只能启用一种,为空就是不启用。将生成的 *.jks文件复制到conf目录下。
3)配置用户认证,单机部署采用文件配置方式,nifi.security.user.authorizer=file-provider,登录认证配置nifi.security.user.login.identity.provider=single-user-provider。相关配置文件是authorizers.xml。配置file-provider,重点配置admin用户的"Initial Admin Identity"属性为证书配置用户CN=Admin,OU=NIFI,注释掉single-user-authorizer。
4)配置用户和用户权限。如果nifi启动不起来,后台报错AuthorizerCreationException,"Unable to locate initial admin CN=Admin,OU=NIFI to seed policies"。经检查user.xml文件中没有用户。这里重点配置file-user-group-provider的<property name="Initial User Identity 1">CN=Admin,OU=NIFI</property>。在NIFI启动时,会自动生成user.xml中的用户identifier。
<userGroupProvider>
<identifier>file-user-group-provider</identifier>
<class>org.apache.nifi.authorization.FileUserGroupProvider</class>
<property name="Users File">./conf/users.xml</property>
<property name="Legacy Authorized Users File"></property>
<property name="Initial User Identity 1">CN=Admin,OU=NIFI</property>
</userGroupProvider>
<accessPolicyProvider>
<identifier>file-access-policy-provider</identifier>
<class>org.apache.nifi.authorization.FileAccessPolicyProvider</class>
<property name="User Group Provider">file-user-group-provider</property>
<property name="Authorizations File">./conf/authorizations.xml</property>
<property name="Initial Admin Identity">CN=Admin,OU=NIFI</property>
<property name="Legacy Authorized Users File"></property>
<property name="Node Identity 1"></property>
<property name="Node Group"></property>
</accessPolicyProvider>
5)启动NIFI, 执行 bin\run-nifi.bat。
4. 浏览器导入CA证书 *.p12文件。 如果是谷歌浏览器,一定要导入“受信任的根证书颁发机构”一类,否则提示证书无效。
5. 访问https://localhost:8443/nifi/ 8443就是 配置文件中配置的https的端口号。
6、用户登录。当时我是了好多好多次,就是提示invalid。搜了好久资料终于看到set-single-user-credentials命令设置用户名和密码,即生成login-identity-providers.xml的single-user-provider。但是run-nifi.bat文件中不支持此命令,在nifi.sh文件中才有,因此修改run-nifi.bat文件。执行 run-nifi.bat set-single-user-credentials "CN=Admin,OU=NIFI" 密码, 密码最少12位。
if "X%~1" == "Xset-single-user-credentials" goto setsingleusercredentials
set START_CLASS=org.apache.nifi.bootstrap.RunNiFi
set BOOTSTRAP_ACTION=run
cmd.exe /C "%JAVA_EXE%" %JAVA_PARAMS% %START_CLASS% %BOOTSTRAP_ACTION%
popd
:setsingleusercredentials
cmd.exe /C "%JAVA_EXE%" %JAVA_PARAMS% -Dnifi.properties.file.path=%CONF_DIR%\nifi.properties org.apache.nifi.authentication.single.user.command.SetSingleUserCredentials %~2 %~3
再执行run-nifi.bat启动nifi,到登录界面,输入用户名CN=Admin,OU=NIFI,和密码,就正常进入主界面了。