Apache NiFi 最初的理念是什么?

因为我已经成功地使用NiFi通过了基本的数据流,所以我想通过阅读”概述”页面来确认NiFi到底是什么。请注意,我只需要大致理解流程和意思,不需要完全翻译。

我从下面的概述页面确认了。

请查阅以下网址:http://nifi.apache.org/docs.html

什么是Apache NiFi?

NiFi是为了实现系统间数据流自动化而构建的。
数据流在各种情境中被使用,但在NiFi中指的是自动化和管理的系统间信息交换流程。
这个问题域在企业中,当系统之间发生数据的输出/输入时,常常发生。
解决方法一直在不断讨论中,并且这个流程在企业集成模式(EIP)中也有所体现。

NiFi的目标是构建以下高级挑战的解决方案:
– 应对系统故障
– 应对超过处理能力的数据获取情况
– 应对各种情况(大、小、数据错误)的发生
– 快速灵活地更新数据流
– 实现松散耦合的系统间通信
– 遵守合规性和安全性
– 追随在生产环境中持续改进的需求

多年来,数据流一直被视为体系架构中的必要之恶。然而,如今数据流构建已成为使企业活动成功的必要要素,而且要求能够进行有趣且快速的更新。例如,这可能包括SOA、基于API的系统集成、物联网、大数据以及微服务等。此外,对于更严格的隐私控制和安全合规性的要求也成为推动力。

在受到这些经历的各个企业中,对数据流的需求和模式变得相似。
主要的区别在于个别转换处理的复杂性和变化频率,但这不会影响共同的概念。
NiFi被创建出来以应对这种数据流的新挑战。

Apache NiFi的核心概念

NiFi的基本设计概念与流程导向编程(Flow Based Programming,FBP)密切相关。
与Flow Based Programming相关的术语映射如下表所示。

NiFi TermFBP TermDescriptionFlowFileInformation PacketFlowFileはシステム間を移動する各オブジェクトのことを示している。
NiFiではKeyValueペアで属性文字列を保持している。FlowFile ProcessorInformation PacketEIPにおいてはProcessorとはルーティング、変換、システム仲介を行うものとなっている。
Processorは与えられたFlowFileの属性、およびFlowFileの流れるストリームにアクセスする。
Processorは0から任意の数のFlowFile群を処理単位として認識し、その単位で処理やコミット、ロールバックを可能とする。ConnectionBounded BufferConnectionはProcessor間の実接続を示す。
Connectionはキューとして動作し、様々な処理を異なるタイミングで差し込むことが可能。
これらのキューは動的な優先度付け機構、バックプレッシャー機構を有する。Flow ControllerSchedulerFlow ControllerはNiFi中のプロセス、スレッドの配置や接続関係について統括している。
Flow ControllerはProcessor間のFlowFileのやり取りを容易にするBrokerとして動作する。Process GroupsubnetProcess GroupはプロセスとConnectionの一群を指し、外部からメッセージを受け取るInputPortや出力するOutputPortを有する。
これらの組み合わせによってProcess Groupは新たなコンポーネントの生成も可能になっている。

这个设计概念与 SEDA 相似。NiFi 获得了许多关于设计的想法,来自于 SEDA。
例如以下内容:
– 可视化和管理有向图的方法
– 如何以异步并行高吞吐量处理经常变化的数据流
– 如何构建并行执行模型,而不给开发人员带来困扰
– 在混合了松耦合和密耦合组件的情况下,如何设计高可重用性且易于测试的方案
– 关于连接中的背压和自然执行恢复的方针
– 实现细致的错误处理方案,而不是粗粒度的异常处理
– 如何轻松追踪并理解从进程到数据的输入输出流向

NiFi的架构

nifi-arch.png
    • WebServerNiFiのHTTPベースのコマンド/制御APIのハンドリングを行う。

 

    • Flow Controllerオペレーション上の頭となる。起動しているスレッドの管理と、いつ実行するかの制御を行う。

 

    • Extensions後述されるNiFiの拡張ポイントで、JVM上で実行される。

 

    • FlowFile RepositoryNiFiの現状アクティブなFlow上を流れているFlowFileのトラッキングを行う。プラグイン機構で出力方式を選べるようになっており、デフォルトではWAL方式でローカルストレージに出力する。

 

    • Content Repository現状流れているFlowFileが保持する実Contentを保持する。プラグイン機構で出力方式を選べるようになっており、デフォルトではシンプルにローカルストレージに出力するのみだが、ストレージの数に応じて分散して出力が可能。

 

    Provenance Repositoryイベントの元データを保持する。出力方式についてはContent Repositoryを同様。
nifi-arch-cluster.png

期望/特点-广义的NiFi性能

作为NiFi的设计原则之一,它被设计成能充分利用运行它的主机的性能。
尤其是在CPU和磁盘方面,会产生负载的处理模型。详细信息请参阅管理员指南。

对于输入/输出

吞吐量和延迟在系统配置中有很大的依赖关系。
NiFi的子系统的IO部分采用插件配置,使用不同的插件会有很大的变化,但默认配置下数据会存储在本地磁盘上,下面是关于这种配置的值的说明。
大致上说,一块磁盘的写入和读取速度可以达到每秒50MB左右,但是当使用NiFi来控制大规模流程时,需要至少100MB或以上的吞吐量。
NiFi本身的吞吐量几乎是随着添加磁盘呈线性增长的,所以只需要添加磁盘即可。
值得注意的是,实际上会成为瓶颈的是FlowFile存储库和Provenance存储库。
我们计划在性能测试的模板中包含构建媒介,一旦完成,系统管理员将能够更容易地理解配置更改所带来的影响。

关于中央处理器(CPU)

流程控制器负责将线程与每个处理器进行关联。
每个处理器在完成自己的处理后立即返回并转换线程。
流程控制器根据设置调整线程池的大小,但实际可并行执行的线程数量取决于主机的核心数和同时运行的服务等因素。
然而,在典型的IO密集型流程中,即使将更多的线程分配给它也基本上不会有问题。

关于RAM

因为NiFi在JVM上运行,所以具有与常见的JVM应用程序相同的垃圾回收性能。

NiFi的主要特点

消息处理的保证

作为NiFi的基本理念,对于大规模系统来说,扩展性和消息处理保证是必不可少的。
通过使用Content Repository的WAL(写入前日志)方式的输出,可以有效地实现消息处理的保证。
同时,还采用了非常高的事务性能要求、负载均衡、Copy-On-Write以及充分发挥HDD的优势的读写策略。

带有后向压力/压力释放的数据缓冲

NiFi支持数据缓冲,并可以根据特定容量和保存期限施加适当的背压。

优先级队列 kuì)

NiFi 默认按照队列中数据的老旧顺序进行处理,但也支持按照新旧顺序、数据大小顺序等进行优先级排序的策略,并且可以进行扩展。

各流程的QoS设定

在数据流中存在着需要优先确保数据不缺失的流程,以及需要优先在一定时间内进行处理的流程等。NiFi可以针对每个流程进行相应的设置,以满足这些需求。

确认数据的来源

NiFi能够自动记录数据的来源,并可通过系统间的数据流进行访问。这可用于合规性、故障排除和优化等方面。

细致的历史记录缓冲/恢复

NiFi的内容存储库充当滚动缓冲区,并且会在数据存储期限过期、处理完成或容量不足时进行删除。
这一功能与数据源保持能力结合使用,非常有用于数据的确认、存储和世代间的生命周期管理。

在画面上进行控制和执行命令

由于数据流程复杂,可视化可以使理解和定义变得容易,并且可以减少错误。NiFi不仅可以在屏幕上可视化,还可以实时反映屏幕上的操作,相比于定义和部署的用例,构建变得极为容易。
如果更改数据流,则立即隔离并反映到组件级别。
可以在不停止整体的情况下尝试更改数据流。

安全

系统间的加密

数据流必须不仅易于使用,还必须安全。
NiFi的入口点通信可以通过多种方式进行加密。
此外,NiFi中流动的内容也可以进行加密。

当用户使用时加密的方式

NiFi提供的不仅仅是基本的访问路径加密,而且还通过插件机制定义了每个用户可以执行的操作和可见范围。此外,如果需要输入像密码这样的不希望被查看的值,输入时就会被哈希化并保持,不能直接查看。

可扩展的设计

设计扩展点

我们在系统中提供了各种扩展点,如处理器、控制器服务、报告任务、优先级设置器以及客户用户界面。

类加载器隔离

我认为在各种组件化系统中,每个人都经历过依赖性的噩梦。
NiFi采用了按扩展划分类加载器的模型,尽量减少了各个扩展库之间的冲突。
这个扩展管理机制被称为”NiFi归档”,详细描述可在开发者指南中找到。

集群化(横向扩展)

NiFi通过在多个节点上进行扩展,在提高性能方面具备优势。
即使单个节点的吞吐量为100MB/s,通过叠加节点可以实现GB级的吞吐量。
当然,在此过程中,负载均衡和故障转移机制是一个有趣的挑战。
目前,通过与能够进行异步队列排队的Kafka等消息基础设施进行协作,可以补充解决此问题。
此外,通过使用NiFi中具备的Site-to-Site机制,可以共享多个NiFi节点之间的负载信息并进行平衡,这也被视为一种有效的机制。

总结

那么,我已经确认了NiFi的概述。暂且可以这样说,我们可以看到NiFi上存在着哪些组件,以及它们是如何工作的。至于扩展部分和详细的调优内容,这次的内容对我来说一点头绪都没有,看来以后还需要去了解。

接下来,您可以再次观看“入门指南”,尝试一下有哪些窗口和功能,这样应该不错。

bannerAds