基于NIFI工具搭建生产级别的IIOT系统

2023-10-12 05:04

本文主要是介绍基于NIFI工具搭建生产级别的IIOT系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本示例内容在使用NIFI构建一个高度可扩展的物联网应用数据管道示例的基础上进行。

前文中的示例,如果放到生产环境中,那么MQTT和MINIFI部署在智能设备中,NIFI部署在数据中心服务器上。

如果需要修改MINIFI中的ETL任务,那么我们需要导出模板,转换成yml文件,放到MINIFI的conf目录下,然后重启MINIFI。技术上可行,但实际是不现实的,因为设备成千上万,部署位置千差万别。有没有更好的方法呢?

这里要解决两个问题:

  • 更新ETL任务时,智能设备中的MINIFI不应该重启。

  • 智能设备中的MINIFI应该能够自动获取更新后的yml文件。

    在MINIFI子项目中,已经提供了一个工具:

图片

Apache NiFi MiNiFi Command and Control(简称MINIFI C2)官方说明:

MiNiFi代理允许我们将数据流推送到网络边缘的较小设备上。这在一个较小的包中提供了使用NiFi处理数据的许多细节。在各种设备上运行许多不同的代理时,一个巨大的挑战是协调它们的工作并推出修改后的流。C2服务器是尝试解决此用例的开始。它为现有的PullHttpChangeIngestor功能提供了一个端点,目的是方便将适当的流定义分发到每个代理类。

在假设的用例中,一个或多个MiNiFi代理类定期轮询C2服务器,以获取对其流的更新。当有新版本可用时,C2服务器将把它发送回代理,此时代理将尝试使用新流重新启动自己,如果启动时出现问题,则回滚。C2服务器是可扩展和灵活配置的。ConfigurationProvider接口是主要的扩展点,在这里应该可以使用任意逻辑来获取更新的流。服务器支持双向TLS认证和可配置授权。

从上述说明可以看出,完美解决了前面两个问题,下面我们安装部署MINIFI C2。

#MINIFI C2官方文档
https://github.com/apache/nifi/tree/main/minifi/minifi-c2
https://cwiki.apache.org/confluence/display/MINIFI/C2+Design#C2Design-Stop

1、安装启动 MINIFI C2

图片

2、访问MINIFI C2

http://localhost:10090/c2/config?class=raspi3&version=6

图片

注意地址中classversion的参数值来自哪里:

图片

访问这个地址,输出的是目录下的文件内容。

到这里,MINIFI C2安装好了。那么设备上的MINIFI怎么连接过来呢?

3、配置MINIFI连接MINIFI C2

MiNiFi使用"Change Ingestor(更改接收器)",通过"Change Ingestor"将可能的新配置通知给代理。Change Ingestor是可插入模块,目前支持以下接收器:

  • RestChangeIngestor

  • PullHttpChangeIngestor

本示例中,使用PullHttpChangeIngestor,每隔一段时间来查询C2服务器并下载任何可用的新配置。要配置此接收器,需编辑minifi文件./conf/bootstrap.conf,取消注释相应的行,并按如下所示设置属性:

图片

使用此配置,每个MiNiFi代理每隔1分钟会在http://localhost:10090/c2/config查询C2服务器REST API,并要求"raspi3"类的最新配置。

1分钟的频率仅用于演示目的。生产环境不会如此频繁地更新代理。

重启MINIFI,使配置生效。

4、测试联调

为了更好的演示ETL修改的效果,修改ETL,增加一个组件updateAttribute,添加一个属性version,属性值为1,然后创建模板、下载模板,转换为yml格式,部署到MINIFI上。

图片

像使用NIFI构建一个高度可扩展的物联网应用数据管道示例中那样,测试,看下收到数据的version值,应该是1.

在NIFI中,修改这个ETL,将version改为2,然后创建模板、下载模板,转换为yml格式,然后命名为config.text.yml.v2,放到minifi-c2-home\files\raspi3目录下:

图片

等1分钟,再次发送测试数据,看下收到的数据中version值是否变为2。

这里的命名约定非常重要。文件名以v版本号结尾。

我们将更新的yml放到的MINIFI C2上,设备上的MINIFI扫描到了新版本,自动热部署,完成了更新。解决了开头提出的那两个问题。

至此,示例完成。

最后,提供一个来自网络的IOT生产环境架构示意图,供参考:

图片

这篇关于基于NIFI工具搭建生产级别的IIOT系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/193449

相关文章

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

sqlite3 命令行工具使用指南

《sqlite3命令行工具使用指南》本文系统介绍sqlite3CLI的启动、数据库操作、元数据查询、数据导入导出及输出格式化命令,涵盖文件管理、备份恢复、性能统计等实用功能,并说明命令分类、SQL语... 目录一、启动与退出二、数据库与文件操作三、元数据查询四、数据操作与导入导出五、查询输出格式化六、实用功

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.