赞
踩
简单的说,NiFi 就是为了解决不同系统间数据自动流通问题而建立的。虽然 dataflow
这个术语在各种场景都有被使用,但我们在这里使用它来表示不同系统间的自动化的可管理的信息流。自企业拥有多个系统开始,一些系统会有数据生成,一些系统要消费数据,而不同系统之间数据的流通问题就出现了。这些问题出现的相应的解决方案已经被广泛的研究和讨论,其中企业集成 eip(Enterprise Integration Patterns
) 就是一个全面且易于使用的方案。
dataflow 要面临的一些挑战包括:
dataflow
的存在就是为了连接这种大规模分布的,松散的,甚至根本不是设计用来一起工作的组件系统。多年来,数据流一直是架构中不可避免的问题之一。现在有许多活跃的、快速发展的技术,使得 dataflow
对想要成功的特定企业更加重要,比如 SOA,API,IOT,BigData。此外,合规性,隐私性和安全性所需的严格程度也在不断提高。尽管不停的出现这些新概念新技术,但 dataflow
面临的困难和挑战依旧,其中主要的区别还是复杂的范围,需要适应的需求变化的速度以及大规模边缘情况的普遍化。NiFi 旨在帮助解决这些现代数据流挑战。
NiFi 的基本设计概念与基于流程的编程 FBP(Flow-based programming
)的主要思想密切相关。以下是一些主要的 NiFi 概念以及它们如何映射到 FBP:
NiFi 术语 | FBP 术语 | 描述 |
---|---|---|
FlowFile | Information Packet | FlowFile 表示在系统中移动的每个对象,对于每个 FlowFile,NiFi 都会记录它一个属性键值对和 0 个或多个字节内容(FlowFile 有 attribute 和 content ) |
FlowFile Processor | Black Box | 实际上是处理器起主要作用。在 eip 术语中,处理器就是不同系统间的数据路由,数据转换或者数据中介的组合。处理器可以访问给定 FlowFile 的属性及其内容。处理器可以对给定工作单元中的零或多个流文件进行操作,并提交该工作或回滚该工作 |
Connection | Bounded Buffer | Connections 用来连接处理器。它们充当队列并允许各种进程以不同的速率进行交互。这些队列可以动态地对进行优先级排序,并且可以在负载上设置上限,从而启用背压 |
Flow Controller | Scheduler | 流控制器维护流程如何连接,并管理和分配所有流程使用的线程。流控制器充当代理,促进处理器之间流文件的交换 |
Process Group | Subnet | 进程组里是一组特定的流程和连接,可以通过输入端口接收数据并通过输出端口发送数据,这样我们在进程组里简单地组合组件,就可以得到一个全新功能的组件(Process Group) |
此设计模型也类似于 SEDA,带来了很多好处,有助于 NiFi 成为非常有效的、构建功能强大且可扩展的数据流的平台。其中一些好处包括:
NiFi 在操作系统上的 JVM 内执行。JVM 上 NiFi 的主要组件如下:
Write-Ahead Log
技术(简单普及下,WAL
的核心思想是:在数据写入库之前,先写入到日志,再将日志记录变更到存储器中)写到指定磁盘目录。NiFi 也能够在集群内运行。
从 NiFi 1.0 版本开始,NiFi 集群采用了 Zero-Master Clustering
模式。NiFi 集群中的每个节点对数据执行相同的任务,但每个节点都在不同的数据集上运行。Apache ZooKeeper 选择单个节点作为集群协调器,ZooKeeper 自动处理故障转移。所有集群节点都会向集群协调器发送心跳报告和状态信息。集群协调器负责断开和连接节点。此外,每个集群都有一个主节点,主节点也是由 ZooKeeper 选举产生。我们可以通过任何节点的用户界面与 NiFi 集群进行交互,并且我们所做的任何更改都将复制到集群中的所有节点上。
NiFi 的设计目的是充分利用其运行的底层主机系统的能力。这种资源的最大化在 CPU 和磁盘方面尤其明显。
For IO:不同系统不同配置可预期的吞吐量或延迟会有很大差异,具体取决于系统的配置方式。鉴于大多数 NiFi 子系统都有可插拔的实现方法,所以性能取决于实现。但是,对于一些具体和广泛适用的地方,请考虑使用现成的默认实现。这些实现都是持久的,有保证的让数据流传递,并且是使用本地磁盘来实现。因此,保守点说,假设在典型服务器中的普通磁盘或 RAID 卷上的每秒读 / 写速率大约为 50 MB,那么,对于大型数据流,NiFi 应该能够有效地达到每秒 100 MB 或更多的吞吐量。这是因为预期添加到 NiFi 的每个物理分区和 Content repository
都会出现线性增长,瓶颈将出现在 FlowFile repository
和 Provenance repository
的某个点上。我们计划提供一个基准测试和性能测试模板,然后允许用户能够轻松测试他们的系统并确定瓶颈在哪里,以及他们可能成为瓶颈的原因。此模板还应使系统管理员可以轻松进行更改并验证其影响。(期待这个测试功能的出现)
For CPU:Flow Controller 充当引擎的角色,指示特定处理器何时可以被分配线程去执行。编写处理器以在执行任务后立即释放线程。可以为 Flow Controller 提供一个配置值,该值指示它维护的各种线程池的可用线程。理想的线程数取决于主机系统内核数量,系统中是否正在运行其他服务,以及流程中要处理的流的性质。对于典型的 IO 大流量,合理的做法是让多线程可用。
For RAM:NiFi 在 JVM 中运行,因此限制于 JVM 提供的内存。JVM 垃圾回收成为限制实际堆总大小以及优化应用程序的运行的一个非常重要的因素。NiFi 作业在定期读取相同内容时可能会占用大量 I/O。可以配置足够大的磁盘以优化性能。
Flow Management
Ease of Use
Security
Extensible Architecture
processors
,Controller Services
,Reporting Tasks
,Prioritizers
和 Customer User Interfaces
。Flexible Scaling Model
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。