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

news2024/9/24 17:21:32

本示例内容在使用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生产环境架构示意图,供参考:

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java架构师海量数据的存储方案

目录 1 导学2 海量数据和大数据的区别3 海量数据处理的核心思想4 数据库架构设计的方法论5 海量数据处理的方法6 海量数据的存储方案7 海量数据当中的写的方案8 海量数据当中读的方案9 总结1 导学 本章的主要内容呢是大型系统架构设计难点之一的海量数据架构设计相关的知识落到…

配置mysql+Navicat+XShell宝塔:Mark

Centos7开放3306端口(iptables 防火墙 未设置) Centos7开放3306端口_centos开启3306端口-CSDN博客 firewall-cmd --zonepublic --add-port3306/tcp --permanent Navicat连接1130错误的解决方法 Navicat连接1130错误的解决方法 - 风纳云 ERROR 1062 …

零基础转行网络安全可以做什么工作

一直在说网络安全行业好就业、薪资高、前景也好,但是大家对网络安全这个行业具体做什么工作可能还一知半解。所以今天来跟大家聊聊,网络安全学完可以找到什么样的工作,顺便把不同岗位的不同技术要求也说一下。 安全运维工程师 由于一些知名…

儿童龋齿:原因与预防护理

引言: 儿童的健康是每个家庭都十分关心的问题,其中口腔健康尤为重要。儿童龋齿,也被称为童年龋齿,是一种常见但可预防的口腔健康问题。本文将探讨儿童龋齿的原因,以及提供有关如何预防和护理儿童口腔健康的重要信息。…

Java架构师缓存架构设计解决方案

目录 1 缓存常见的三大问题1.1 缓存雪崩1.2 缓存穿透1.3 缓存击穿2 缓存key的生成策略3 热点数据集中失效的问题4 如何提高缓存的命中率5 缓存和数据库双写不一致的问题6 如何对缓存数据进行分片7 如何应对缓存数据的热点问题1 缓存常见的三大问题 缓存常见的三大问题就是缓存雪…

uni-app生命周期

uni-app的生命周期包括:应用生命周期、页面生命周期、组件生命周期 一、应用生命周期(只能在App.vue文件中监听) 函数说明onLaunch初始化完成时触发(全局只触发一次)onShow启动时或从后台进入前台显示onHide从前台进入…

Jenkins 执行远程shell脚本部署jar文件问题起不来

如图:最开始的时候没有加: source /etc/profile 这一行, run.sh里面的java -jar xxxx.jar 一直执行不来。 一开始以为是Jenkins执行退出后会kill一切它启动的进程,所以加了在run.sh里面加了export BUILD_IDdontKillMe&#xff0…

ArcGIS: 第二届全国大学生GIS技能大赛(广西师范学院)详解-下午题

目录 01 题目 02 思路和实操 2.1 流域提取-思路 2.2 流域提取-实操 2.2.1 获取DEM ​编辑 2.2.2 水文分析-提取流域基于单出水口 2.3 河网分级-思路 2.4 河网分级-实操 2.4.1 提取河道网络 2.4.2 河网分级 ​编辑 2.5 子流域提取和处理-思路 2.6 子流域提取和处理-实…

软考高项-第十章:项目进度管理

重要知识点: 以上总结,仅供参考。

第三章-完善MBR

为什么mbr编译时设置数据的起始地址vstart0x7c00,就可以保证程序加载器能将MBR加载到内存的0x7c00? 程序加载器负责将根据编译后的程序地址加载到内存中,mbr 用 vstart0x7c00 来修饰的原因,是开发人员知道 mbr 要被加载器&#x…

Transformer [Attention is All You Need]

(一)论文部分 Abstract (1)The best performing models also connect the encoder and decoder through an attention mechanism. 最好的性能通过注意力机制将编码器和解码器连接在一起。 (2)the Transformer, based solely on attention mechanisms,…

安装JAVA 依赖环境 Maven 教程

一、下载链接与Tips Maven 过去版本下载传送门:( Java 8 兼容 Java 7,即 Java 8 的 JDK 能运行 3.8.8 以下的 Maven) Maven Releases History Download 点击 release notes 点击 available for download. 选择 bin 的安装包 然…

【使用 TensorFlow 2】03/3 创建自定义损失函数

一、说明 TensorFlow 2发布已经接近5年时间,不仅继承了Keras快速上手和易于使用的特性,同时还扩展了原有Keras所不支持的分布式训练的特性。3大设计原则:简化概念,海纳百川,构建生态.这是本系列的第三部分,…

Linux之open/close/read/write/lseek记录

一、文件权限 这里不做过多描述,只是简单的记录,因为下面的命令会涉及到。linux下一切皆是文件包括文本、硬件设备、管道、数据库、socket等。通过ls -l 命令可以查看到以下信息 drwxrwxrwx 1 root root 0 Oct 10 17:06 open -rwxrwxrwx 1 root roo…

js 滚动鼠标滑轮放大缩小图片

<div><h1>原图</h1><imgsrc"https://so.360tres.com/dmsmty/160_160_100/t01b29734b9604fb7aa.webp"/><h1>可放大缩小的图</h1><div class"imgView"><imgsrc"https://so.360tres.com/dmsmty/160_160_10…

建设一个完整的企业经营管理体系是什么样的

建设一个完整的企业经营管理体系是确保企业高效、可持续发展的基础。该体系包括组织架构、战略规划、运营管理、人力资源管理、财务管理等多个要素&#xff0c;下面将逐一进行详细介绍。 一、组织架构&#xff1a; 组织架构是企业内部各个部门、职能和层级之间的关系和分工。…

代码随想录算法训练营第五十三天 |1143.最长公共子序列、1035.不相交的线、53. 最大子序和动态规划

一、1143.最长公共子序列 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;动态规划子序列问题经典题目 | LeetCode&#xff1a;1143.最长公共子序列_哔哩哔哩_bilibili 思考&#xff1a; 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]…

关键词搜索天猫商品列表数据,天猫商品列表数据接口

在网页抓取方面&#xff0c;可以使用 Python、Java 等编程语言编写程序&#xff0c;通过模拟 HTTP 请求&#xff0c;获取天猫网站上的商品页面。在数据提取方面&#xff0c;可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是&#xff0c;天猫网站…

pytest + yaml 框架 -56. 输出日志优化+allure报告优化

前言 v1.4.8 版本优化接口请求和响应输出日志&#xff0c;生成的allure报告也按步骤优化request和response详情日志 优化日志 用例 test_log1: -name: log1request:url: http://127.0.0.1:8000/api/test/demomethod: GETvalidate:- eq: [status_code, 200]- eq: ["cod…

从 0 到 1 打造企业数字化运营闭环

打造企业数字化运营闭环是现代企业发展的必然趋势。它涉及到信息技术、数据分析、流程优化等多个方面&#xff0c;通过有效整合和运用这些资源&#xff0c;可以实现从0到1的全面数字化转型。 下面是一个详细的介绍&#xff0c;包括步骤、关键要素和实施策略。 一、了解需求和…