Apache NiFi简介

图片名称

1. 背景

Apache NiFi是由美国过国家安全局(NSA)贡献给Apache基金会的开源项目,其设计目标是自动化系统间的数据流。2015年7月20日,Apache 基金会通过其博客宣布Apache NiFi顺利孵化完成称为Apache的顶级项目之一。NiFi初始的项目名称是Niagarafiles,当NiFi项目开源之后,一些早先在NSA(美国国家安全局)的开发者们创立了初创公司Onyara,Onyara随之继续NiFi项目的开发并提供相关的支持。Hortonworks公司最近收购了Onyara并将其开发者整合到自己的团队中。apache nifi 也成为了Hortonworks进军物联网的利器。

2. nifi是什么

简单的来说nifi的建立是为了使各个系统之间的”数据流“自动化,“数据流”这个词代表着多种含义,这里提到的数据流特指自动化和可管理的信息流。自从企业中出现多个系统之后,要面临的首要任务是解决数据生产系统与数据处理系统之间的数据处理流。自从这个问题面世以来,人们已经广泛的探讨了解决方案,其中《Enterprise Integration Patterns》一书提出一个全面可行的消息消费方式。 对于数据流来说主要面临以下几个大方面的挑战:

  • 系统故障(System fail) 包括但不限于:网络故障,硬盘故障,软件崩溃,人为失误
  • 数据处理瓶颈 有时,数据源头产生数据的速度远远超过数据处理和数据传输的速度,此时整个系统有一个很严重的瓶颈。
  • 异常数据处理 您将始终收到太大,太小,太快,太慢,损坏,错误或格式错误的数据。
  • 业务快速演进 快速数据处理业务的调整,新业务流程和原有业务升级改造
  • 多系统升级不同步引入的前后兼容 原有系统的协议和数据格式,会伴随系统的升级有一定的调整,同时单个系统的升级会影响周边系统。数据流可以把多个大型分布式系统串边在一起,这些系统可以是松散地,甚至设计之初就没考虑未来地集成
  • 兼容性和安全性 法律法规的变更,规章制度的变动,以及政策调整,业务合同的变更。系统和系统之间,系统和用户接口之间要安全,可信和权责分明。
  • 生产环境平滑升级 在实验验证环境很难复制生产环境

多年以来,数据流已经成为一种架构中必不可少的恶性循环之一。 现在虽然有一些积极和快速发展的运动,使得数据流更有趣,对于给定企业的成功更为重要。 这些包括像 面向服务的架构soa api2,物联网iot以及Big Data bigdata的兴起。 此外,合规性,隐私性和安全性所需的严谨程度不断增加。 即使仍然存在所有这些新概念,数据流的模式和需求仍然基本相同。 主要的区别在于复杂性的范围,适应需要的变化率,以及边缘情况在一般情况下是常见的情况。 NiFi旨在帮助解决这些现代数据流挑战。

3. nifi特点

Apache NiFi–一个易于使用、功能强大而且可靠的数据处理和分发系统。它支持强大且可高度配置的基于有向图的数据路由、转换和系统中介逻辑。Apache NiFi的一些高级功能和目标包括但不限于:

  • 基于web的UI
    • 设计,控制,反馈和监控之间的无缝体验
  • 高可配置
    • 数据丢失容错vs保证交付
    • 低延迟vs高吞吐量
    • 动态优先级
    • 流可以在运行时修改
    • 背压(Back presure)
  • 数据血统
    • 从始至终的追踪数据流(dataflow)
  • 为扩展而设计
    • 构建自己的处理器和跟多
    • 支持快速开发和有效测试
  • 安全
    • 支持SSL,SSH,HTTPS加密内容,等等……
    • 多租户授权和内部授权/策略管理

4. nifi的核心概念

NiFi的基本设计理念与基于流程编程的主要思想密切相关fbp。 以下是一些主要的NiFi概念,以及它们如何映射到FBP:

nifi名词 FBP名词 描述
FlowFile Information Packet (流文件)FlowFile是系统间传输的对象,nifi会追踪每个Key/Value属性对,以及相关的内容字节流
FlowFile Processor Black Box 处理器负责执行操作,在EIP中,处理器可以实现数据路由的合并,变换,及系统间协调。处理器可以读取FlowFile的属性和流数据。处理器可以操作工作单元中多个FlowFile,也可以提交或还原提交的任务。
Connection Bounded Buffer 连接器提供处理器之间的关联,它以队列的形式存在并允许控制各处理器之间的数据流动速度,队列可以动态的设定优先级,允许设定阈值(队列数量大小或者字节大小)来实现背压。
Flow Controller Scheduler 流控制器维护处理器之间的连接关系,管理和分配所有处理器使用的线程。它用作促成处理器间流文件(FlowFiles)交换的代理
Process Group subnet 处理器组是特定的处理器和连接器的集合。它能够通过输入端口(input)接收数据,通过输出端口()发送数据。处理器组可以通过组合各种组件方式来构造新的组件。

这种设计设计和seda相似,它为nifi成为一个建立强大和可扩展的数据流的高效平台带来许多的好处,这些好处包括但不限于:

  • 可视化的创建和管理处理器之间的有向图
  • 本质上是异步的,也能够支持高吞吐量,即便在处理(processing)和流量波动情况下做到自然缓存
  • 提供高并发框架,使开发人员无需担心高并发的复杂性
  • 促进内聚和松散耦合的组件的开发,从而可在不同环境中复用和做单元测试
  • 资源受限的连接产生了重要的功能,比如非常自然和直观的背压和释压
  • 错误的处理变得和基本过程(happy path)一样自然,而不是粗粒度的捕获全部的错误
  • 数据在系统的进出的点以及流动过程能够一目了然,并且非常容易跟踪。

5. 参考

  1. ) hopeatme的csdn博客
  2. ) Hortonworks进军物联网,发布基于Apache NiFi项目的DataFlow产品
  3. ) nifi doc