nifi初识---核心概念和整体架构

NIFI的核心概念:

nifi设计理念是基于流的编程,下面是nifi的一些概念:
NiFi Term FBP Term Description
FlowFile 信息流 每一个数据流在系统里面流动,并包含着key/value形式的attribute,以及不同大小的content
FlowFile Processor 黑盒 数据流处理器是nifi中真正处理工作的,譬如,整合,转换,调节系统中的流转的数据流,数据流处理器可以接收上游的flow的attribute,以及content。数据流处理器可以处理0至多个流,并给出相应的反馈,比如提交或者回滚
Connection 有界缓冲区 不同处理器之间的连接纽带,他是一个消息队列,可以接收不同的处理器,并与之以不同的流频率进行交互,这些队列可以动态分配优先级,并且可以有负载的上限,从而实现反压,
Flow Controller 调度 流量控制器负责管理有多少处理器的连接和管理线程以及分配资源,他作为不同处理器之间的数据流交换代理
Process Group 子网 处理器组是一些连在一起的处理器的组合,他可以通过inputport得到数据,也可以通过outputport发送数据,我们可以使用不同的处理器组,构造更多的组合

这种设计模式和seda架构类似,这种架构提供了许多有益的结果,帮助NiFi成为构建强大的可扩展数据流有效的平台。其中一些好处包括:

非常适合观察和管理创建的有向图处理器。

本质上是异步的,即使在处理和流量波动的情况下,也允许非常高的吞吐量和自然缓冲

提供高度并发的模型,而不需要开发人员担心典型的并发性复杂性

促进内聚和松耦合的组件的发展,然后可以在其他情况下重用,并促进可测试单位

资源受限的连接使得诸如背压压力释放的关键功能非常自然和直观

错误处理的很好,而不是粗粒度的抓包

数据进入和离开系统的点以及数据的流转都很好理解和容易跟踪


NIFI的架构:

这里写图片描述
NiFi在主机操作系统上的JVM中执行。JVM上NiFi的主要组件如下:

网络服务器
Web服务器的目的是托管NiFi的基于HTTP的命令和控制API。

流量控制器
流量控制器是操作的大脑。它提供线程来运行扩展,并管理扩展接收资源执行的时间表。

扩展
其他文档中描述了各种类型的NiFi扩展。这里的关键是扩展在JVM中运行和执行。

FlowFile存储库
FlowFile存储库是NiFi保持跟踪当前在流中活动的给定FlowFile的状态的地方。存储库的实现是可插入的。默认方法是位于指定磁盘分区上的持久性预写日志。

内容库
内容存储库是给定FlowFile的实际内容字节所在的位置。存储库的实现是可插入的。默认的方法是一个相当简单的机制,它将数据块存储在文件系统中。可以指定多个文件系统存储位置,以便使用不同的物理分区来减少任何单个卷上的争用。

来源库
Provenance Repository是所有起源事件数据存储的地方。存储库结构是可插入的,默认实现是使用一个或多个物理磁盘卷。在每个位置内,事件数据被索引和搜索。

NiFi也能够在群集内运行

这里写图片描述

从NiFi 1.0版本开始,采用了Zero-Master聚类范例。NiFi集群中的每个节点在数据上执行相同的任务,但是每个节点都在不同的数据集上运行。Apache ZooKeeper选择一个节点作为集群协调器,故障转移由ZooKeeper自动处理。所有群集节点都会向群集协调器报告心跳和状态信息,集群协调器负责断开和连接节点。
另外,每个集群都有一个主节点,也由ZooKeeper选出。作为DataFlow管理器,您可以通过任何节点的用户界面(UI)与NiFi群集进行交互。您所做的任何更改都会复制到群集中的所有节点,从而允许多个入口点。

NiFi的性能期望和特点

NiFi旨在充分利用其所运行的底层主机系统的功能。这种资源的最大化在CPU和磁盘方面尤其强大。

对于IO
人们期望看到的吞吐量或等待时间差异很大,这取决于系统的配置。考虑到大多数主要的NiFi子系统都有可插拔的方法,性能取决于实施。但是,对于具体和广泛适用的内容,请考虑开箱即用的默认实现。这些都是持久的保证交付,并使用本地磁盘。所以要保守,在典型的服务器中,假设在适当的磁盘或RAID卷上每秒读取/写入速率大约为50 MB。对于大量数据流,NiFi应该能够高效地达到每秒100 MB或更多的吞吐量。这是因为对于添加到NiFi中的每个物理分区和内容存储库预计会有线性增长。这将在FlowFile存储库和源数据库的某个时刻出现瓶颈。我们计划提供基准测试和性能测试模板,以包含在构建中,使用户可以轻松测试其系统并确定哪些地方存在瓶颈,哪些地方可能成为问题的一个因素。这个模板还应该使系统管理员很容易进行更改并验证影响。

对于CPU
流控制器作为引擎指定特定处理器何时被执行的线程。处理器被编写为在线程完成执行任务后立即返回线程。流控制器可以给定一个配置值,指示它维护的各个线程池的可用线程。理想的线程数量取决于主机系统资源的核心数量,系统是否在运行其他服务以及流程中处理的性质。对于典型的IO流量来说,使许多线程可用是合理的。

对于RAM
NiFi存在于JVM中,因此仅限于JVM提供的内存空间。JVM垃圾回收成为限制总的实际堆大小以及优化应用程序运行时间的一个非常重要的因素。定期阅读相同的内容时,NiFi作业可能是I / O密集型的。配置足够大的磁盘以优化性能。

关键NiFi特性的高层次概述

流量管理

保证交付

NiFi的核心理念是,即使在非常高的规模下,保证交付是必须的。这是通过有效地使用专门构建的持久预写日志和内容存储库来实现的。它们一起被设计成允许非常高的事务处理速率,有效的负载分散,写入时拷贝以及发挥传统磁盘读/写的优点。

数据缓冲写出/背压和压力释放
NiFi支持所有排队数据的缓冲以及当这些队列达到指定限制时提供背压的能力,或者指定过期时间。

优先排队

NiFi允许设置一个或多个优先级方案,以便如何从队列中检索数据。默认值是最早的,但是有些时候数据应该是最新的,最大的,或者是其他一些定制的。

流量特定的QoS(延迟v吞吐量,损失容限等)

使用方便

可视化命令和控制
数据流可能变得相当复杂。能够对这些流程进行可视化并以视觉方式进行表达可以大大有助于降低这种复杂性并确定需要简化的领域。NiFi不仅可以实现数据流的可视化建立,而且可以实时进行。而不是设计和部署它更像是粘土成型。如果更改立即生效的数据流。更改细化并与受影响的组件隔离。您不需要停止整个流程或一组流程,只需进行一些特定的修改即可。

流程模板
数据流往往是高度模式化的,而通常有很多不同的方法来解决问题,这对分享这些最佳实践非常有帮助。模板,允许主题专家建立和发布他们的流程设计,并让他人受益和协作。

数据来源
NiFi自动记录,索引,并提供源数据作为对象流经系统,甚至跨扇入,扇出,转换,等等。这些信息在支持合规性,故障排除,优化和其他方面变得非常重要。

恢复/记录细粒度历史的滚动缓冲区
NiFi的内容库被设计为充当历史的滚动缓冲区。数据仅在内容存储库变老或需要空间时才被删除。这与数据来源能力结合在一起,使得点击到内容,下载内容和重放都成为一个令人难以置信的有用的基础,所有这些都在对象生命周期中的某个特定点上,甚至可以跨越几代人。

安全

系统到系统
数据流只是安全的。数据流中的每个点都使用NiFi,通过使用带有加密的协议(例如双向SSL)提供安全的交换。另外,NiFi使得流程能够加密和解密内容,并在发送方/接收方的任一侧使用共享密钥或其他机制。

用户到系统
NiFi支持双向SSL身份验证,并提供可插拔的授权,以便在特定级别(只读,数据流管理器,管理员)可以正确控制用户的访问权限。如果用户将一个敏感属性(如密码)输入到流中,则会立即将其加密到服务器端,并且即使以加密形式也不会在客户端再次公开。

多租户授权
给定数据流的权限级别适用于每个组件,允许管理员用户具有良好的访问控制级别。这意味着每个NiFi集群都能够处理一个或多个组织的要求。与孤立的拓扑相比,多租户授权为数据流管理提供了一种自助服务模式,使每个团队或组织都能够全面了解剩下的流程,对于其他的没有访问权限的地方。

可扩展的架构

延期
NiFi的核心是为扩展而构建,因此它是数据流程可以以可预测和可重复的方式执行和交互的平台。扩展点包括:处理器,控制器服务,报告任务,优先级和客户用户界面。

类加载器隔离
对于任何基于组件的系统,依赖性问题可能会很快发生。NiFi通过提供自定义的类加载器模型来解决这个问题,确保每个扩展bundle都暴露在一个非常有限的依赖关系集合中。因此,可以建立扩展,而不用担心它们是否会与另一个扩展冲突。这些扩展包的概念被称为NiFi档案,在开发者指南中有更详细的讨论。

站点到站点通信协议
NiFi实例之间的首选通信协议是NiFi站点到站点(S2S)协议。S2S可以轻松,高效,安全地将数据从一个NiFi实例传输到另一个NiFi实例。NiFi客户端库可以轻松构建并捆绑到其他应用程序或设备中,通过S2S与NiFi进行通信。S2S支持基于套接字的协议和HTTP(S)协议作为底层的传输协议,使得在S2S通信中嵌入代理服务器成为可能。RPG就是一个典型的点到点通信实例。

灵活的缩放模型

向外扩展(集群)
如上所述,NiFi被设计为通过将多个节点聚集在一起来向外扩展。如果单个节点的配置和配置为每秒处理数百MB,则可以将适度的群集配置为每秒处理GB。然后,NiFi和从中获取数据的系统之间的负载平衡和故障切换带来了有趣的挑战。使用基于异步排队的协议(如消息服务,Kafka等)可以提供帮助。使用NiFi的站点到站点功能也非常有效,因为它是允许NiFi和客户端(包括另一个NiFi集群)相互通话,共享加载信息和在特定授权端口之间交换数据的协议。

放大和缩小
NiFi也被设计为以非常灵活的方式放大和缩小。从NiFi架构的角度来看,增加吞吐量的方面,配置时可以在“调度”选项卡下增加处理器上的并发任务数量。这允许更多的进程同时执行,提供更大的吞吐量。另一方面,由于硬件资源有限,您可以完美地缩放NiFi以适合在需要小尺寸的边缘设备上运行.

猜你喜欢

转载自blog.csdn.net/zhangshk_/article/details/78846203