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链接类型链接目标
handlehttprequestsuccessExecuteStreamCommand
ExecuteStreamCommandoutput streamHandleHttpResponse
originalModifyBytes
HandleHttpResponse
ModifyBytes
ListenWebSocket全选ModifyBytes
text messagePutWebSocket
PutWebSocketsuccessPutFile
PutFile

在这里插入图片描述

handlehttprequest设置

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

选择PROPERTIS标签,如图所示。

在这里插入图片描述

Listening Port6688
Hostnamecdh02
HTTP Context Mapcreate new service

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

在这里插入图片描述

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

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

在这里插入图片描述

ExecuteStreamCommand设置

SETTINGS标签中勾选nonzero status。

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

Command Path/root/Archive/server.sh
Ignore STDINfalse

HandleHttpResponse设置

SETTINGS标签中勾选success,failure

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

HTTP Status Code200
HTTP Context MapStandardHttpContextMap

ModifyBytes设置

SETTINGS标签中勾选success

PROPERTIS按照默认配置即可

ListenWebSocket设置

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

WebSocket Server ControllerServicecreate new service
Server URL Path/echo

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

PutWebSocket设置

SETTINGS标签中勾选failure

PROPERTIS按照默认配置即可

PutFile设置

SETTINGS标签中勾选success,failure

PROPERTIS标签中修改设置。

Directory/var/www/html/logs
Conflict Resolution Strategyreplace
Create 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就已经搭建完成了。

posted @ 2020-09-03 11:52  鹤望兰号  阅读(903)  评论(0)    收藏  举报