NIFI简易demo

tech2022-12-17  103

首先我们需要搭建一个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链接类型链接目标handlehttprequestsuccessExecuteStreamCommandExecuteStreamCommandoutput streamHandleHttpResponseoriginalModifyBytesHandleHttpResponse无无ModifyBytes无无ListenWebSocket全选ModifyBytestext messagePutWebSocketPutWebSocketsuccessPutFilePutFile无无

handlehttprequest设置

双击handlehttprequest打开设置,SETTINGS标签中取消勾选success

选择PROPERTIS标签,如图所示。

Listening Port6688Hostnamecdh02HTTP Context Mapcreate new service

加粗部分是必填项,注意这里新建了standardHttpContextMap之后还需要点击右侧的箭头进行激活,激活页面如图。

找到你刚才新建的Map,点击小闪电进行激活,Enable。

退出后发现之前的感叹号变成方块就是配置成功。

ExecuteStreamCommand设置

SETTINGS标签中勾选nonzero status。

PROPERTIS标签,注意这里的CommandPath目前是空的,一会儿我们要在这个目录下创建命令脚本

Command Path/root/Archive/server.shIgnore STDINfalse

HandleHttpResponse设置

SETTINGS标签中勾选success,failure

PROPERTIS中修改内容,这里的ContextMap就是刚刚创建的Map。

HTTP Status Code200HTTP Context MapStandardHttpContextMap

ModifyBytes设置

SETTINGS标签中勾选success

PROPERTIS按照默认配置即可

ListenWebSocket设置

PROPERTIS标签中修改设置,这里需要重新创建一个jettyWebSocketServer

WebSocket Server ControllerServicecreate new serviceServer URL Path/echo

仍然按照之前的方法进行激活,并且需要设置这个监听的端口号为9998。

PutWebSocket设置

SETTINGS标签中勾选failure

PROPERTIS按照默认配置即可

PutFile设置

SETTINGS标签中勾选success,failure

PROPERTIS标签中修改设置。

Directory/var/www/html/logsConflict Resolution StrategyreplaceCreate Missing Directoriestrue

至此我们的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就已经搭建完成了。

最新回复(0)