什么是nifi?
  nifi是用来处理数据集成场景的数据分发,BS结构的图形化控制工具,具有对大数据的处理和分发能力,nifi可以处理各种各样的数据源和不同格式的数据。可以从一个源中获取数据,对其进行转换,然后将其推送到另一个目标存储地。

 

ionic2架构 nifi架构_JVM

 

 

nifi解决的问题

  1、高可用(HA)

  2、高性能高并发

  3、方便错误纠察

  通过Processors-boxes再运用各个连接器-箭头形成的流程。让nifi提供了一个基于流的编程体验,比较直观,相比于这些操作,如果使用代码来操作实现这些功能的话,可能需要上百行代码才能解决此问题。

ionic2架构 nifi架构_缩放_02

 

 

 

  4、快速响应

nifi的设计实现具有扎实的理论基础,它是分阶段的事件驱动架构,它旨在结合事件驱动和多线程模式两者的有点,从而做到易扩展,解耦合,高并发。各个stage之间的通信由event来传递,event的处理由stage的线程池异步处理。

  5、兼容各种数据格式

  6、安全性高

  7、方便迁移

 

nifi核心概念

  FlowFile:表示通过系统移动的每个对象,包含数据流的基本属性(工作流文件)

  FlowFile Processor:负责实际对数据流执行工作(处理器)

  Connection:负责不同处理器之间的连接,是数据的有界缓冲区(连接线)

  Flow Controller:管理进程使用的线程及其分配(流量控制器)

  Process Group:进程组是一组特定的进程及其连接,允许组合其他组件创建新组件(过程组)

NiFi架构:

ionic2架构 nifi架构_数据_03

 

 

Nifi架构
  nifi是在主机操作系统上的JVM内执行。JVM上的Nifi主要组件如下:

  1、网络服务器(Web Server)

      web服务器的目的是托管nifi的基于HTTP的命令和控制API  

  2、流控制器(Flow Controller)

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

  3、扩展(Extensions)  

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

  4、FlowFile存储库(FlowFile Repository)

      FlowFile存储库是NiFi跟踪目前在流程中活动的给定FlowFile的知识状态。

      存储库的实现是可插拔的。默认方法是位于磁盘分区上的持久写入前端日志。

  5、内容存储库(Content Repository)

      Content Repository是给定FlowFile的实际内容字节。存储库的实现是可插拔的。

      默认方法是一个相当简单的机制,它将数据块存储在文件系统中。

      可以指定多个文件系统存储位置,以便获得不同的物理分区,以减少任何单个卷上的争用。

  6、源头存储库(Provenance Repository)

      Provenance Repository是存储所有事件数据的地方。

      Provenance Repository的实现是可热插拔的,默认实现是使用一个或多个物理磁盘卷。

      在每个位置内的事件数据都是被索引并可搜索的。

 

 

NiFi的特性及性能预期

  nifi的设计目的是充分利用其运行的底层主机系统的能力。这种资源的最大化在CPU和磁盘方面尤其明显。

对于IO

对于CPU

对于RAM

 

 

Nifi功能的高级概述

流量管理

    保证交货:NiFi的核心理念是,即使在非常高的规模,必须保证交付。

    数据缓冲背压和压力释放:NiFi支持对所有排队的数据进行缓冲,以及当队列达到指定限制时提供背压的能力,或者在数据达到指定年龄时使其老化(其值已经消失)的能力。

    优先排队:NiFi允许设置一个或多个优先级排序方案来了解如何从队列中检索数据。

         默认值是最早的,但有时候数据应该被拉到最新,最大的第一个或其他一些自定义方案。

    流特定Qos(延迟 vs 吞吐量, 丢失容限等)

        数据流的一些点数据非常关键,并且是不容忍的。

                            还有一段时间,它必须在几秒钟内被处理和交付成为任何价值。

        NiFi使得细粒度流特定配置这些问题。

使用方便

      视觉指挥与控制

      数据流可能变得相当复杂。能够可视化这些流程并在视觉上表达它们可以大大减少复杂性并确定需要简化的领域。

      NiFi不仅可以直观地建立数据流,而且可以实时地实现。而不是设计和部署它更像是成型工具。

      如果对更改的数据流进行更改立即生效。

      更改是细粒度的,并且与受影响的组件隔离。不需要为了进行一些具体的修改而停止整个流程。

      流模板

      数据流往往是高度模式化的,而通常有许多不同的方式来解决问题。

      模板允许主题专家构建和发布他们的流程设计,并为其他人创造和合作。

      资料来源

      Nifi自动记录,索引并提供可用的来源数据,因为对象即使在扇入,扇出,转换等过程中也可以流经系统。

      该信息在支持合规性,故障排除,优化和其他场景方面变得非常重要。

      恢复/记录细粒历史的滚动缓冲区

      NiFi的内容存储库旨在作为历史的滚动缓冲区。只有当数据从内容存储库中老化或者需要空间时才会被删除。

      这与数据来源功能相结合,使得在对象的生命周期中甚至跨越世代的特定点上实现点击内容,内容下载和重放非常有用的基础。

 

安全

      可扩展架构

      灵活的缩放模型

可扩展架构

      延期

        NiFi的核心是扩展的核心,因此它是数据流处理可以以可预测和可重复的方式执行和交互的平台。

        扩展点包括:处理器,控制器服务,报告任务,优先级和客户用户界面。

分类器隔离

        对于任何基于组件的系统,可能会迅速发生依赖问题。

        NiFi通过提供自定义类加载器模型来解决这个问题,确保每个扩展捆绑包都暴露在非常有限的依赖关系中。

        因此,可以构建扩展,而不用担心它们是否可能与另一个扩展冲突。这些扩展束的概念称为NiFi Archives, 在开发人员指南中有更详细的讨论。

 

站点到站点通信协议

 

        NiFi实例之间的首选通信协议是NiFi站点到站点(S2S)协议。

        S2S可以方便,高效,安全地将数据从一个NiFi实例传输到另一个。

        NiFi客户端库可以轻松构建并捆绑到其他应用程序或设备中,以通过S2S与NiFi通信。

        S2S中都支持基于套接字的协议和HTTP(S)协议作为底层传输协议,从而可以将代理服务器嵌入到S2S通信中。

 灵活的缩放模型

        横向扩展(聚类)

        NiFi旨在通过如上所述将多个节点聚类在一起使用来展开。

        如果单个节点被配置并配置为每秒处理数百MB,则可以配置适度的集群来处理每秒的GB数。

        这将带来NiFi与获取数据的系统之间的负载平衡和故障转移的挑战。可以使用基于异步的消息队列, 如Kafka来解决问题。

        使用NiFi的站点到站点功能也非常有效,因为它是允许NiFi和客户端(包括另一个NiFi集群)相互通话,共享关于加载的信息以及在特定授权端口上交换数据的协议。

  • 放大与缩小
  •         NiFi也被设计成以非常灵活的方式进行放大和缩小。
  •         在从NiFi框架的角度增加吞吐量方面,可以在配置时增加“计划”选项卡下的处理器上的并发任务数量。这允许更多的进程同时执行,提供更大的吞吐量。
  •         可以将NiFi完美地缩放到适合于在硬件资源有限的边缘设备上运行,因为需要较小的占用空间。