网站做的好有什么用,政务服务平台,网站开发外贸,wordpress诗词类主题开源框架Apache NiFi调研 NiFi背景介绍一、什么是NiFi1.1 Apache NiFi特点#xff1a;流管理、易用性、安全性、可扩展的体系结构和灵活的伸缩模型。1.2 Apache NiFi特性1.2 Apache NiFi核心概念1.3架构 二、NiFi的诞生#xff0c;要致力于解决的问题有哪些#xff1f;三、为… 开源框架Apache NiFi调研 NiFi背景介绍一、什么是NiFi1.1 Apache NiFi特点流管理、易用性、安全性、可扩展的体系结构和灵活的伸缩模型。1.2 Apache NiFi特性1.2 Apache NiFi核心概念1.3架构 二、NiFi的诞生要致力于解决的问题有哪些三、为什么使用NiFi?常见处理器 NiFi背景介绍
2006年NiFi由美国国家安全局NSA的Joe Witt创建。2015年7月20日Apache 基金会宣布Apache NiFi顺利孵化成为Apache的顶级项目之一。NiFi初始的项目名称是Niagarafiles当NiFi项目开源之后一些早先在NSA的开发者们创立了初创公司OnyaraOnyara随之继续NiFi项目的开发并提供相关的支持。Hortonworks公司收购了Onyara并将其开发者整合到自己的团队中形成HDFHortonworks Data Flow平台。2018年Cloudera与Hortonworks合并后新的CDH整合HDF改名为Cloudera Data Flow(CDF)。Cloudera将NiFi作为其新产品Cloudera Flow Management和Cloudera Edge Management的核心组件推出可以方便地使用Cloudera Manager进行Parcel安装和集成而Apache NiFi就是CFM的核心组件。
一、什么是NiFi
Apache NiFi 是一个易于使用、功能强大而且可靠的数据处理和分发系统在大数据生态中的定位是成为一个统一的与数据源无关的大数据集成平台。Apache NiFi是为数据流设计它支持高度可配置的指示图来指示数据路由、转换和系统中流转关系支持从多种数据源动态拉取数据Data Lake、DBOracle、MySQL、API等。简单地说NiFi是为自动化系统之间的数据流而生。 这里的数据流表示系统之间的自动化和受管理的信息流。 基于WEB图形界面通过拖拽、连接、配置完成基于流程的编程实现数据采集、处理等功能。未来NiFi有可能替换Flume、Sqoop等大数据导数据的工具。
NiFi官网地址Apache NiFihttps://nifi.apache.org/ 文档https://nifi.apache.org/docs.html Nifi GitHub源码地址 https://github.com/apache/nifi NiFi客户处理各种各样的数据源和数据格式。可以由一个数据源中获取数据对数据进行计算、转化把数据推送到其他的数据源进行存储。
1.1 Apache NiFi特点流管理、易用性、安全性、可扩展的体系结构和灵活的伸缩模型。 流量管理 保证交付NiFi的核心理念是即使规模非常大也必须保证交付。这是通过有效使用专门构建的持久预写日志和内容存储库来实现的。它们一起被设计成这样一种方式允许非常高的事务率、有效的负载分散、写时复制并发挥传统磁盘读/写的优势。带背压和压力释放的数据缓冲NiFi支持对所有排队的数据进行缓冲并在这些队列达到指定的限制时提供回压或者在数据达到指定的年龄(其值已经消亡)时使其老化。优先队列NiFi允许为如何从队列中检索数据设置一个或多个优先级方案。默认情况下是最早的先提取但有时应该先提取最新的数据先提取最大的数据或者其他一些自定义方案。特定于流的QoS(延迟v吞吐量损失容忍度等)在数据流中有些点的数据是绝对关键的并且是不能容忍损失的需要实时处理和交付才能具有任何价值NiFi支持这些关注点的细粒度流特定配置。 易用性别 多个处理器(Processors)被连接器Connector的箭头链接在一起创建了数据流程。NiFi提供fbp基于流编程的体验。 可视化管理数据流可能变得相当复杂。能够可视化这些流程并以可视化的方式表达它们可以极大地帮助降低复杂性并确定需要简化的区域。NiFi不仅可以可视化地建立数据流而且可以实时地实现。对数据流进行更改立即生效。流模板数据流往往是高度面向模式的模板允许主题专家构建和发布他们的流设计并让其他人从中受益和协作。数据源当对象流经系统时NiFi自动记录、索引并提供来源数据即使是在扇入、扇出、转换等过程中也是如此。这些信息对于支持遵从性、故障排除、优化和其他场景非常重要。恢复/记录细粒度历史的滚动缓冲区NiFi的内容存储库被设计成历史的滚动缓冲区。数据只有在内容存储库老化或需要空间时才会被删除。这与数据来源功能相结合形成了一个非常有用的基础可以在对象生命周期(甚至可以跨越几代)的特定点上实现点击内容、下载内容和重播。 安全性 系统到系统数据流需要安全保障数据流中的每个点上的NiFi通过使用带有加密协议(如2-way SSL)提供安全交换。此外NiFi使流能够加密和解密内容并在发送方/接收方等式的任何一方使用共享密钥或其他机制。系统用户NiFi支持双向SSL身份验证并提供可插拔授权以便在特定级别(只读、数据流管理器、管理)正确控制用户的访问。如果用户将敏感属性(如密码)输入到流中它将立即在服务器端加密并且即使以加密形式也不会再次在客户端公开。多租户授权给定数据流的权限级别应用于每个组件允许admin用户拥有细粒度级别的访问控制。这意味着每个NiFi集群都能够处理一个或多个组织的需求。与孤立的拓扑相比多租户授权支持数据流管理的自助服务模型允许每个团队或组织管理流同时充分了解他们无法访问的其余流。 可扩展体系结构 扩展NiFi的核心是为扩展而构建的因此它是一个平台数据流进程可以在其上以可预测和可重复的方式执行和交互。扩展点包括:处理器、控制器服务、报告任务、优先级和客户用户界面。类加载器隔离对于任何基于组件的系统依赖关系问题都可能很快发生。NiFi通过提供自定义类加载器模型来解决这个问题确保每个扩展包只暴露给非常有限的一组依赖项。点到点通信协议NiFi实例之间的首选通信协议是NiFi Site-to-Site (S2S)协议。S2S可以轻松地将数据从一个NiFi实例传输到另一个NiFi实例轻松、高效、安全。NiFi客户端库可以很容易地构建并捆绑到其他应用程序或设备中通过S2S与NiFi通信。在S2S中基于套接字的协议和HTTP(S)协议都被支持作为底层传输协议这使得在S2S通信中嵌入代理服务器成为可能。 灵活缩放模型 水平扩展(聚类)NiFi被设计为通过使用如上所述的群集多个节点来向外扩展。如果将单个节点配置为每秒处理数百MB则可以将普通集群配置为每秒处理GB。扩缩容NiFi还被设计成以非常灵活的方式扩大和缩小从NiFi框架的角度来看在配置时可以在Scheduling选项卡下增加处理器上并发任务的数量
NiFi是高度并发的并将并发的复杂性封装在自己内部。Processor为您提供了高级抽象它隐藏了并行编程固有的复杂性。 Processor同步运行可以为它分配多个线程来应对负载。
NiFi通过多种机制全面的跟踪系统状态来实现了高度的可靠性。这些机制是可配置的可以根据需求在延迟和吞吐量之间进行适当的权衡。
NiFi利用血缘和出处特征来跟踪每条数据的历史记录。这使得NiFi具有追踪每条数据发生什么转变的能力。
Apache Nifi提出的数据血缘解决方案被证明是审计数据管道的出色工具。
1.2 Apache NiFi特性
Apache NiFi支持数据路由、转换和系统中介逻辑的强大且可伸缩的有向图。
基于浏览器的用户界面设计、控制、反馈和监控的无缝体验。数据来源跟踪完整从开始到结束跟踪信息。丰富的配置 容错和保证交付低延迟高吞吐量动态优先级流配置的运行时修改背压控制 可扩展的设计 定制处理器和服务的组件体系结构快速开发和迭代测试 安全通信 HTTPS具有可配置的身份验证策略多租户授权和策略管理用于加密通信的标准协议包括TLS和SSH
1.2 Apache NiFi核心概念 FlowFile表示在系统中移动的每个对象对于每个对象NiFi跟踪键/值对属性字符串的映射及其零或多字节的相关内容。 每一块“用户数据”(即用户带入NiFi进行处理和分发的数据)都被称为一个FlowFile。一个FlowFile由两部分组成:属性和内容。内容就是用户数据本身。属性是与用户数据相关联的键值对 FlowFile Processor处理器实际执行工作处理器是在系统之间进行数据路由、转换或中介的某种组合。处理器可以访问给定的FlowFile及其内容流的属性。处理器可以在给定的工作单元中操作零个或多个flowfile并提交该工作或回滚。 处理器是NiFi组件负责创建、发送、接收、转换、路由、拆分、合并和处理流文件。它是NiFi用户用于构建数据流的最重要的构建块。 Connection连接提供处理器之间的实际链接。充当队列允许各种进程以不同的速率进行交互。这些队列可以动态地划分优先级并且可以设置负载上限从而启用背压。 Flow Controller流控制器维护进程如何连接并管理所有进程使用的线程及其分配。流控制器充当了促进处理器之间流文件交换的代理。 Process Group进程组是一组特定的进程及其连接这些进程可以通过输入端口接收数据通过输出端口发送数据。通过这种方式流程组允许通过简单地组合其他组件来创建全新的组件。
这种设计模型帮助NiFi成为构建强大且可伸缩的数据流的非常有效的平台其好处如下
很好地用于处理器有向图的可视化创建和管理。本质上是异步的允许非常高的吞吐量和自然缓冲即使处理和流速率波动。提供了一个高度并发的模型开发人员不必担心并发性的典型复杂性。促进内聚和松散耦合组件的开发这些组件可以在其他上下文中重用并促进可测试单元的开发。资源受限的连接使得诸如回压和压力释放等关键功能非常自然和直观。错误处理变得像快乐之路一样自然而不是粗粒度的一刀切。数据进入和退出系统的点以及它如何流经系统都很容易理解和跟踪。
1.3架构
NiFi的设计目的是充分利用它所运行的底层主机系统的功能对IO、CPU、RAM高效使用这种资源最大化在CPU和磁盘方面表现得尤为突出详细信息在管理指南中的最佳实践和配置技巧中。 NiFi在主机操作系统上的JVM中执行JVM上NiFi的主要组件如下:
Web Serverweb服务器的目的是承载NiFi基于http的命令和控制API。Flow Controller流量控制器是操作的大脑它为要运行的扩展提供线程并管理扩展何时接收要执行的资源的调度。Extensions各种类型的NiFi扩展这里的关键点是扩展在JVM中操作和执行。FlowFile Repository流文件存储库是NiFi跟踪当前流中活动的给定流文件状态的地方。存储库的实现是可插入的。默认方法是位于指定磁盘分区上的持久预写日志。Content Repository内容存储库是一个给定的FlowFile的实际内容字节所在的地方。存储库的实现是可插入的。默认的方法是一种相当简单的机制即在文件系统中存储数据块。可以指定多个文件系统存储位置以便使用不同的物理分区以减少任何单个卷上的争用。Provenance Repository源头存储库是存储所有源头事件数据的地方。存储库结构是可插入的默认实现是使用一个或多个物理磁盘卷。在每个位置中事件数据都被索引并可搜索。
NiFi也能够在集群中运行NiFi 采用了零领导者集群NiFi集群中的每个节点在数据上执行相同的任务但每个节点操作不同的数据集。Apache ZooKeeper选择一个节点作为Cluster Coordinator故障转移由ZooKeeper自动处理。所有集群节点都向集群协调器报告心跳和状态信息。集群协调器负责断开和连接节点。此外每个集群都有一个主节点也由ZooKeeper选举产生。作为DataFlow管理器可通过任何节点的用户界面(UI)与NiFi集群交互操作更改复制到集群中的所有节点允许多个入口点。
二、NiFi的诞生要致力于解决的问题有哪些
因为网络故障、磁盘故障、软件崩溃、人为犯错导致的系统错误数据读写超出了自身系统的处理能力有时给定数据源的速度可能超过处理或交付链的某些部分而只需要某一个环节出现问题整个流程都会受到影响。获取的数据不具有规范性即超出边界问题总是会得到太大、太小、太快、太慢、损坏、错误或格式错误的数据。数据结构的优先级变化很快启用新流和更改现有流的速度必须非常快现实业务或需求变化快设计新的数据处理流程或者修改已有的数据处理流程必须要够敏捷。数据结构化管理的可移植性与不同数据格式之间的依赖性难以在测试环境模拟生产环境数据。
三、为什么使用NiFi?
大量 — 包括采集、存储和计算的量都非常大。大数据的计量单位由TB、PB1000个T、EB100万个T、ZB10亿个T不断发展。多样性 — 种类和来源多样化。包括结构化、半结构化和非结构化数据具体表现为网络日志、音频、视频、图片、地理位置信息等等多类型的数据对数据的处理能力提出了更高的要求高速 — 数据增长速度快处理速度也快时效性要求高准确性 — 数据的准确性和可信赖度即数据的质量
NiFi无缝地从多个数据源提取数据并提供了处理不同模式数据的机制。 因此当数据的“多样性”较高时它会发挥价值。并且NiFi提供了多个Processor来清理和格式化数据。
微服务很新潮。在那些松散耦合的服务中服务之间的数据就是契约。 Nifi是在这些服务之间路由数据的可靠方法。万物互联的时代物联网将大量数据带到云中。从边缘到云的数据摄取和验证带来了许多新挑战NiFi可以有效应对这些挑战主要通过[MiniFi]这是针对边缘设备的NiFi子项目。制定了新的准则和法规促使大数据经济重新调整。在日益增加的监控范围内对于企业来说对其数据管道有清晰的总览非常重要。例如NiFi数据血缘可能有助于遵守法规。
简单来说NiFi是用来处理数据集成场景的数据分发。NiFi是基于Java的使用Maven支持包的构建管理。 NiFi基于Web方式工作后台在服务器上进行调度。用户可以为数据处理定义为一个流程然后进行处理后台具有数据处理引擎、任务调度等组件。
常见处理器
想到创建数据流必须了解可供使用的处理器类型NiFi包含许多开箱即用的不同处理器这些处理器提供了从许多不同系统摄取数据、路由、转换、处理、分割和聚合数据以及将数据分发到许多系统的功能。几乎在每一个NiFi发行版中可用的处理器数量都会增加。因此将不尝试为每个可用的处理器命名下面重点介绍一些最常用的处理器并根据它们的功能对它们进行分类。 数据转换 CompressContent压缩或解压缩内容。ConvertCharacterSet将用于对内容进行编码的字符集转换为另一个字符集。EncryptContent加密或解密内容。ReplaceText使用正则表达式修改文本内容。TransformXml对XML内容应用XSLT转换。JoltTransformJSON应用JOLT规范转换JSON内容 路由和中介 ControlRate限制数据通过流的一部分的速率。DetectDuplicate基于一些用户定义的标准监控重复的flowfile。通常与HashContent一起使用。DistributeLoad通过仅将一部分数据分发到每个用户定义的关系来实现负载平衡或示例数据。MonitorActivity当用户定义的一段时间过去了没有任何数据通过流中的特定点时发送一个通知。可以选择在数据流恢复时发送通知。RouteOnAttribute基于属性th的路由流文件。ScanAttribute扫描FlowFile上的用户定义属性集检查是否有任何属性与用户定义字典中的术语匹配。RouteOnContent搜索FlowFile的内容看它是否匹配任何用户定义的正则表达式。如果是则将FlowFile路由到配置的Relationship。ScanContent根据用户定义的字典和路由中存在或不存在的术语搜索FlowFile的内容。字典可以由文本项或二进制项组成。ValidateXml根据XML模式验证XML内容;根据用户定义的XML模式根据FlowFile的内容是否有效来路由FlowFile。 数据库访问 ConvertJSONToSQL将JSON文档转换为SQL INSERT或UPDATE命令然后传递给PutSQL处理器。ExecuteSQL执行用户定义的SQL SELECT命令将结果以Avro格式写入FlowFile。PutSQL通过执行由FlowFile内容定义的SQL DDM语句来更新数据库。SelectHiveQL对Apache Hive数据库执行用户自定义的HiveQL SELECT命令将结果以Avro或CSV格式写入FlowFile。PutHiveQL通过执行由FlowFile的内容定义的HiveQL DDM语句来更新Hive数据库。 属性提取 EvaluateJsonPath用户提供JSONPath表达式(类似于XPath用于XML解析/提取)然后根据JSON内容计算这些表达式以替换FlowFile内容或将值提取到用户命名的属性中。EvaluateXPath用户提供XPath表达式然后根据XML内容计算这些表达式以替换FlowFile内容或将值提取到用户命名的属性中。EvaluateXQuery用户提供一个XQuery查询然后根据XML内容计算该查询以替换FlowFile内容或将值提取到用户命名的属性中。ExtractText用户提供一个或多个正则表达式然后根据FlowFile的文本内容计算正则表达式然后将提取的值作为用户命名的属性添加。 系统交互 ExecuteProcess:执行用户自定义的操作系统命令。流程的StdOut被重定向这样写入StdOut的内容就变成了出站FlowFile的内容。这个处理器是一个源处理器——它的输出预计会生成一个新的FlowFile而系统调用预计不会接收任何输入。为了向流程提供输入请使用ExecuteStreamCommand处理器。ExecuteStreamCommand:执行用户自定义的操作系统命令。FlowFile的内容可选地流到进程的StdIn中。写入StdOut的内容成为出站FlowFile的内容。 数据摄取 GetFile将本地磁盘(或网络连接磁盘)中的文件内容流到NiFi中然后删除原始文件。此处理器预计将文件从一个位置移动到另一个位置而不是用于复制数据。GetFTP通过FTP将远程文件的内容下载到NiFi然后删除原始文件。此处理器预计将数据从一个位置移动到另一个位置而不是用于复制数据。GetHDFS监控HDFS中用户指定的目录。每当有新文件进入HDFS时它就会被复制到NiFi中然后从HDFS中删除。此处理器预计将文件从一个位置移动到另一个位置而不是用于复制数据。如果在集群中运行这个处理器也只能在主节点上运行。为了从HDFS复制数据并保留数据或者从集群中的多个节点传输数据请参阅ListHDFS处理器。GetKafka从Apache Kafka中获取消息特别是对于0.8。x版本。消息可以作为每条消息的FlowFile发出也可以使用用户指定的分隔符将消息批处理在一起。GetMongo对MongoDB执行用户指定的查询并将内容写入新的FlowFile。 数据发送 PutFile将FlowFile的内容写入本地(或网络连接)文件系统上的目录。PutFTP将FlowFile的内容复制到远程FTP服务器。PutKafka将FlowFile的内容作为消息发送给Apache Kafka特别是0.8。x版本。FlowFile可以作为单个消息或分隔符发送例如可以指定一个新行以便为单个FlowFile发送多个消息。PutMongo将FlowFile的内容作为INSERT或UPDATE发送到Mongo。 拆分和聚合 SplitTextSplitText接收一个包含文本内容的FlowFile并根据配置的行数将其拆分为1个或多个FlowFile。例如处理器可以被配置为将一个FlowFile分割成许多个FlowFile每个FlowFile只有1行。SplitJson允许用户将一个由数组或许多子对象组成的JSON对象拆分为每个JSON元素的FlowFile。MergeContent这个处理器负责将多个FlowFile合并为一个FlowFile。可以通过将它们的内容连同可选的页眉、页脚和分界符连接在一起或者通过指定归档格式(如ZIP或TAR)来合并flowfile。
NIFI介绍、安装、实践案例 可参考https://juejin.cn/post/7002031938328346654
NiFi分布式安装 可参考https://cloud.tencent.com/developer/article/2206586
Jenkins项目配置-maven项目-全面 可参考https://blog.csdn.net/xiaona0523/article/details/124271773
Maven多模块使用及jenkins构建 可参考https://blog.csdn.net/sinat_34974437/article/details/119926268
彻底理解maven 配置私服 阿里云镜像 可参考https://blog.csdn.net/sjsh_csdn/article/details/119562070
NIFI监控及界面常见菜单说明 可参考https://cloud.tencent.com/developer/article/2209640
可视化编排的数据集成和分发开源框架Nifi轻松入门-上 可参考https://blog.csdn.net/qq_20949471/article/details/128309679?spm1001.2014.3001.5502
Apache NiFi vs 其他技术比较 参考https://zhuanlan.zhihu.com/p/328060780
xsync同步脚本的使用 参考https://blog.csdn.net/nalw2012/article/details/98322637#%E7%AE%80%E4%BB%8B
Linux部署nifi 可参考https://blog.csdn.net/weixin_53134351/article/details/132095066
zookeeper集群搭建详细步骤 参考https://blog.csdn.net/weixin_50642075/article/details/109613621
Hadoop安装教程 Linux版 可参考https://blog.csdn.net/qq_42855570/article/details/115180674
Linux安装Hadoop超详细教程 参考https://blog.csdn.net/sinat_40875078/article/details/104099169
虚拟机VMware相关
安装VMware教程 参考https://zhuanlan.zhihu.com/p/609472766
在VMware中安装CentOS7超详细的图文教程 参考https://blog.csdn.net/qq_45743985/article/details/121152504
VMware虚拟机安装非常详细从零基础入门到精通看完这一篇就够了 参考https://blog.csdn.net/leah126/article/details/131450225
【VMware虚拟机】Linux设置固定IP 参考https://blog.csdn.net/Tiezhu_Wang/article/details/113822362
【linux】linux系统配置静态IP地址超详细手把手教会 参考https://blog.csdn.net/u010521062/article/details/114067036