基于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

相关文章

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批