NIFI简易demo
首先我们需要搭建一个nifi的环境。
这个demo可以简单的理解为,使用nifi创建一个web服务,编写一个简单的web页面,使用js的websocket向某个端口发送信息,再由nifi监控这个端口,将监听到的数据保存,可以使用httpd的方式查看。
首先我们需要安装一个httpd
yum install -y httpd
systemctl start httpd
systemctl enable httpd
mkdir /var/www/html/logs
然后我们访问cdh02:58080/nifi进入nifi的web页面。

选择顶端的Processor(处理器)拖动到面板中,类型选择handlehttprequest,
以此方法依次添加表中内容,并摆放到下图的位置,鼠标放到Processor中,会有一个箭头,拖动箭头到另一个Processor实现二者的链接。
| Processor | 链接类型 | 链接目标 |
|---|---|---|
| handlehttprequest | success | ExecuteStreamCommand |
| ExecuteStreamCommand | output stream | HandleHttpResponse |
| original | ModifyBytes | |
| HandleHttpResponse | 无 | 无 |
| ModifyBytes | 无 | 无 |
| ListenWebSocket | 全选 | ModifyBytes |
| text message | PutWebSocket | |
| PutWebSocket | success | PutFile |
| PutFile | 无 | 无 |

handlehttprequest设置
双击handlehttprequest打开设置,SETTINGS标签中取消勾选success
选择PROPERTIS标签,如图所示。

| Listening Port | 6688 |
|---|---|
| Hostname | cdh02 |
| HTTP Context Map | create new service |
加粗部分是必填项,注意这里新建了standardHttpContextMap之后还需要点击右侧的箭头进行激活,激活页面如图。

找到你刚才新建的Map,点击小闪电进行激活,Enable。
退出后发现之前的感叹号变成方块就是配置成功。

ExecuteStreamCommand设置
SETTINGS标签中勾选nonzero status。
PROPERTIS标签,注意这里的CommandPath目前是空的,一会儿我们要在这个目录下创建命令脚本
| Command Path | /root/Archive/server.sh |
|---|---|
| Ignore STDIN | false |
HandleHttpResponse设置
SETTINGS标签中勾选success,failure
PROPERTIS中修改内容,这里的ContextMap就是刚刚创建的Map。
| HTTP Status Code | 200 |
|---|---|
| HTTP Context Map | StandardHttpContextMap |
ModifyBytes设置
SETTINGS标签中勾选success
PROPERTIS按照默认配置即可
ListenWebSocket设置
PROPERTIS标签中修改设置,这里需要重新创建一个jettyWebSocketServer
| WebSocket Server ControllerService | create new service |
|---|---|
| Server URL Path | /echo |
仍然按照之前的方法进行激活,并且需要设置这个监听的端口号为9998。
PutWebSocket设置
SETTINGS标签中勾选failure
PROPERTIS按照默认配置即可
PutFile设置
SETTINGS标签中勾选success,failure
PROPERTIS标签中修改设置。
| Directory | /var/www/html/logs |
|---|---|
| Conflict Resolution Strategy | replace |
| Create Missing Directories | true |
至此我们的NIFI的配置已经完成。
cd /root
mkdir Archive/
cd Archive
创建index.html文件
复制的时候记得改一下里面的ip和端口号。
<!DOCTYPE html>
<html>
<head>
<title>Echo Chamber</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
</head>
<body>
<div>
<input type="text" id="messageinput"/>
</div>
<div>
<button type="button" onclick="openSocket();" >点击打开socket</button>
<button type="button" onclick="send();" >发送</button>
<button type="button" onclick="closeSocket();" >关闭socket</button>
</div>
<div id="messages"></div>
<script type="text/javascript">
var webSocket;
var messages = document.getElementById("messages");
function openSocket(){
// Ensures only one connection is open at a time
if(webSocket !== undefined && webSocket.readyState !== WebSocket.CLOSED){
writeResponse("WebSocket 已经成功启动");
return;
}
webSocket = new WebSocket("ws://cdh02:9998/echo");
webSocket.onopen = function(event){
if(event.data === undefined)
return;
writeResponse(event.data);
};
webSocket.onmessage = function(event){
writeResponse(event.data);
};
webSocket.onclose = function(event){
writeResponse("链接关闭");
};
}
function send(){
var text = document.getElementById("messageinput").value;
webSocket.send(text);
}
function closeSocket(){
webSocket.close();
}
function writeResponse(text){
messages.innerHTML += "<br/>" + text;
}
</script>
</body>
</html>
创建server.sh文件
server.sh就一行命令。
cat /root/Archive/index.html
然后再NIFI面板中启动所有处理器,,颜色太单调不好看,点击工具栏的小毛笔上色。

简单的讲一下这个流程,就是通过HandleHttpRequest启动一个http的端口,然后由ExecuteStreamCommand访问/root/Archive/server.sh脚本,执行其中的命令,也就是cat index.html。将执行结果发送到HandleHttpResponse,将结果展示在对应的端口中。
ListenWebSocket中设置了cdh02:9998的端口socket监听,在index.html中我们编写了一个send()js函数,负责将输入的内容发送到9998端口,ListenWebSocket监听到信息后通过PutWebSocket发送,由PutFile写入到文件目录中。
然后访问cdh02:6688,就是你在HandleHttpRequest中设置的端口号。

点击打开socket,如果不成功多点几次就好了,页面上会有提示,然后输入框中输入随意信息,点击发送。
因为我设置的写入目录是/var/www/html/logs,所以可以通过httpd直接访问,访问cdh02/logs,在每次发送信息后都会有新的文件生成,可以点击查看文件中的内容。

至此我们这个简易的NIFIdemo就已经搭建完成了。