前些时间做了关于Apache Nifi分布式集群的搭建分享,但很多时候要搭建分布式集群机器资源是个问题,而现在的单机的配置还是相当不错的,故现在就做个关于Windows上搭建个伪分布式集群的分享,同时通过另外一种方式实现Apache Nifi的授权认证。
系统环境及软件版本
- Windows8.1 
- JDK1.8.0_131 
- Nifi-1.4.0 
| Nifi安装目录 | WEB端口 | 
|---|
| xxx\nifi-ncm | 9443 | 
| xxx\nifi-cluster01 | 9444 | 
| xxx\nifi-cluster02 | 9445 | 
(其它版本可参考此篇文章)
另在测试中发个问题,使用Apache Nifi内嵌的Zookeeper搭建伪集群里启动总是提示端口占用的问题,故放弃只采用了单结点启动。
Nifi的服务证书
生成本地Nifi服务证书
解压nifi-toolkit-1.4.0-bin.tar.gz文件后,通过CMD进入bin目录,执行以下的命令:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
 | D:\DevelopTools\nifi-toolkit-1.4.0\bin>tls-toolkit.bat standalone -n "localhost(
3)" -C "CN=Admin, OU=ApacheNIFI" -o "..\target"
2017/10/26 18:21:32 INFO [main] org.apache.nifi.toolkit.tls.standalone.TlsToolki
tStandaloneCommandLine: No nifiPropertiesFile specified, using embedded one.
2017/10/26 18:21:32 INFO [main] org.apache.nifi.toolkit.tls.standalone.TlsToolki
tStandalone: Running standalone certificate generation with output directory ..\
target
******************************************************************************
2017/10/26 18:21:34 INFO [main] org.apache.nifi.toolkit.tls.standalone.TlsToolki
tStandalone: Successfully generated client certificate ..\target\CN=Admin_OU=Apa
cheNIFI.p12
2017/10/26 18:21:34 INFO [main] org.apache.nifi.toolkit.tls.standalone.TlsToolki
tStandalone: tls-toolkit standalone completed successfully
 | 
生成后的目录结构如下:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
 | Folder PATH listing for volume senhui.li
Volume serial number is 000000F0 FA46:A0EB
D:.
│  CN=Admin_OU=ApacheNIFI.p12
│  CN=Admin_OU=ApacheNIFI.password
│  nifi-cert.pem
│  nifi-key.key
│
├─localhost
│      keystore.jks
│      nifi.properties
│      truststore.jks
│
├─localhost_2
│      keystore.jks
│      nifi.properties
│      truststore.jks
│
└─localhost_3
        keystore.jks
        nifi.properties
        truststore.jks
 | 
特意注意: -C “CN=Admin, OU=ApacheNIFI” 中间的空格必须保留
拷贝Nifi服务证书
- 将localhost目录下的文件拷贝到nifi-ncm目录下替换所有的文件
- 将localhost_2目录下的文件拷贝到nifi-cluster01目录下替换所有的文件
- 将localhost_3目录下的文件拷贝到nifi-cluster02目录下替换所有的文件
- 将CN=Admin_OU=ApacheNIFI.p12和CN=Admin_OU=ApacheNIFI.password拷贝到桌面备用,后续登录需要使用
配置单点Zookeeper相关
创建目录及id
进入nifi-ncm的目录,创建woker目录,并把server id写到文件中,命令如下:
| 1
2
 | D:\DevelopTools\nifi-ncm>mkdir -p state\zookeeper
D:\DevelopTools\nifi-ncm>echo -n '1' > state/zookeeper/myid
 | 
更新ZK配置
进入nifi-ncm的conf目录,打开zookeeper.properties文件,内容更新参考如下:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
 | clientPort=2181
initLimit=10
autopurge.purgeInterval=24
syncLimit=5
tickTime=2000
dataDir=./state/zookeeper
autopurge.snapRetainCount=30
# 只需要配置端口服务
server.1=localhost:2181
 | 
更新Nifi配置
进入nifi-ncm的conf目录,打开nifi.properties文件,更新如下的配置属性:
| 1
2
3
4
5
 | nifi.state.management.embedded.zookeeper.start=true
# zookeeper properties, used for cluster management #
# 另外两个节点,只要编辑此字段即可
nifi.zookeeper.connect.string=localhost:2181
 | 
更新State配置
进入nifi-ncm的conf目录,打开state-management.xml文件,更新zookeeper配置,如下:
| 1
2
3
4
5
6
7
8
9
 | 
<cluster-provider>
    <id>zk-provider</id>
    <class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class>
    <property name="Connect String">localhost:2181</property>
    <property name="Root Node">/nifi</property>
    <property name="Session Timeout">10 seconds</property>
    <property name="Access Control">Open</property>
</cluster-provider>
 | 
然后把此文件拷贝到nifi-cluster01和nifi-cluster02相同的目录下
配置Nifi Admin
添加Admin用户
进入nifi-ncm的conf目录,打开authorizers.xml文件,找到file-provider添加如下配置:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
 | <authorizer>
    <identifier>file-provider</identifier>
    <class>org.apache.nifi.authorization.FileAuthorizer</class>
    <property name="Authorizations File">./conf/authorizations.xml</property>
    <property name="Users File">./conf/users.xml</property>
    <property name="Initial Admin Identity">CN=Admin, OU=ApacheNifi</property>
    <property name="Legacy Authorized Users File"></property>
    <property name="Node Identity 1">CN=localhost, OU=NIFI</property>
    <property name="Node Identity 2">CN=localhost_2, OU=NIFI</property>
    <property name="Node Identity 3">CN=localhost_3, OU=NIFI</property>
</authorizer>
 | 
然后把此文件同时拷贝到别外两个节点目录。
注: 在Node Identity x中的OU要写成NIFI,尝试过用别的名称好像不成功,具体的原因未知,感兴趣的可以自行探究一二。
安装证书
打开谷歌浏览器,在设置中找到安全选项中找到管理证书,点击Import开始导入上面生成的证书:CN=Admin_OU=ApacheNIFI.p12,密码在后缀名为.password的文件中,如下图所示:
启动Nifi服务
进入到Nifi安装目录,然后在bin目录中找到run-nifi.bat文件并双击运行,注意启动的顺序: nifi-ncm–>nifi-cluster01/2,等待片刻后(可能会有点久,需要一个选举的过程)打开浏览器输入"https://localhost:9443/nifi",选择刚刚导入的证书,如看到下面的画面表示启动成功:
用户策略
刚登录NIFI页面时,你会发现图标都是灰色的,需要赋予相应的权限才可以开始编辑权限才可以开始编辑。点击页面左侧面板上的钥匙图标,会弹出访问策略的窗口,如下图所示:
在此会看到用户列表为空,那么就要给相应的行为添加用户,点击Create链接即可开始添加,如下图所示:
待所有的权限添加完成后,便可看到NIFI页面的按钮已经点亮,可以开始创建流程。
示例演示
模板上传
下载
DEMO
压缩包,解压出来有个WordCountDemo.xml文件。然后打开浏览器输入NIFI访问地址: https://localhost:9443/nifi/,点击左侧面板中的上传按钮上传模板,如下图所示:
创建流程
拖动NIFI页面顶部的模板按钮到画板空白处,点击ADD按钮即可,然后双击打开WordCountDemo组找到PutFile组件,修改目录地址为你机器的实际可访问路径,如下图所示:
启动流程
点击NIFI页面左下角的NiFi Flow链接返回到主面板,点击WordCountDemo组,然后点击左侧面板中的开始按钮启动流程,如下图所示:
如无异常那么此时你可在目录下找到名为telltale_heart_wordcount的文件,打开便可看到如下图的统计内容:
至此在本地搭建NIFI伪集群就完成了,有问题欢迎留言。