「大数据系列」Apache NIFI:大数据处理和分发系统

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 「大数据系列」Apache NIFI:大数据处理和分发系统


什么是Apache NiFi?

简单地说,NiFi就是为了实现系统间数据流的自动化而构建的。虽然术语“数据流”用于各种上下文,但我们在此处使用它来表示系统之间的自动和管理信息流。这个问题空间一直存在,因为企业有多个系统,其中一些系统创建数据,一些系统消耗数据。已经讨论并广泛阐述了出现的问题和解决方案模式。企业集成模式[eip]中提供了一个全面且易于使用的表单。

数据流的一些高级别挑战包括:

系统失败

网络故障,磁盘故障,软件崩溃,人们犯错误。

数据访问超出了消耗能力

有时,给定的数据源可能会超过处理链或交付链的某些部分 - 只需要一个弱链接就会出现问题。

边界条件仅仅是建议

您将总是获得太大,太小,太快,太慢,损坏,错误或格式错误的数据。

噪音有一天成为下一个信号

组织的优先事项 - 迅速改变。启用新流程和更改现有流程必须快速。

系统以不同的速度发展

给定系统使用的协议和格式可以随时改变,而不管它们周围的系统如何。存在数据流以连接本质上是大规模分布的组件系统,这些组件松散地或根本不设计为一起工作。

合规性和安全性

法律,法规和政策发生变化。企业对企业协议的变化。系统到系统和系统到用户的交互必须是安全的,可信的,负责任的。

生产中持续改进

通常不可能在实验室中复制生产环境。

多年来,数据流一直是架构中必不可少的证据之一。现在虽然有许多活跃且快速发展的运动,但数据流更有趣,对于特定企业的成功更为重要。这些包括:面向服务的体系结构[soa],API [api] [api2],物联网[iot]和大数据[bigdata]的兴起。此外,合规性,隐私性和安全性所需的严格程度也在不断提高。即使仍然存在所有这些新概念,数据流的模式和需求仍然大致相同。然后,主要区别在于复杂性的范围,适应所需的变化率,以及大规模边缘情况变得普遍。 NiFi旨在帮助解决这些现代数据流挑战。

特征

Apache NiFi支持强大且可扩展的数据路由,转换和系统中介逻辑的有向图。 Apache NiFi的一些高级功能和目标包括:

基于Web的用户界面

  • 设计,控制,反馈和监控之间的无缝体验

高度可配置

  • 容忍损失与保证交付
  • 低延迟与高吞吐量
  • 动态优先级
  • 可以在运行时修改流程
  • 背压

数据来源

  • 从头到尾跟踪数据流

专为扩展而设计

  • 构建自己的处理器等等
  • 实现快速开发和有效测试

安全

  • SSL,SSH,HTTPS,加密内容等......
  • 多租户授权和内部授权/策略管理

NiFi的核心概念

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


此设计模型也类似于[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 Clustering范例。 NiFi群集中的每个节点对数据执行相同的任务,但每个节点都在不同的数据集上运行。 Apache ZooKeeper选择单个节点作为集群协调器,ZooKeeper自动处理故障转移。 所有群集节点都会向群集协调器报告心跳和状态信息。 群集协调器负责断开和连接节点。 此外,每个群集都有一个主节点,也由ZooKeeper选举。 作为DataFlow管理器,您可以通过任何节点的用户界面(UI)与NiFi群集进行交互。 您所做的任何更改都将复制到群集中的所有节点,从而允许多个入口点。

NiFi的性能期望和特性

NiFi旨在充分利用其运行的底层主机系统的功能。在CPU和磁盘方面,这种资源的最大化特别强大。有关其他详细信息,请参阅“管理指南”中的最佳做法和配置提示。

对于IO

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

对于CPU

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

对于RAM

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

关键NiFi功能的高级概述

这部分提供了20,000英尺的NiFi基石基础视图,让您可以了解Apache NiFi的大图,以及一些最有趣的功能。主要功能类别包括流量管理,易用性,安全性,可扩展架构和灵活的扩展模型。

流量管理

  • 保证交货

NiFi的核心理念是即使在非常高的规模下,保证交付也是必须的。这是通过有效使用专用的持久性预写日志和内容存储库来实现的。它们的设计可以实现非常高的事务处理速率,有效的负载分散,写入时复制以及发挥传统磁盘读/写的优势。

  • 具有背压和压力释放的数据缓冲

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

  • 优先排队

NiFi允许设置一个或多个优先级方案,用于如何从队列中检索数据。默认值是最早的,但有时应先将数据拉到最新,最大的数据或其他一些自定义方案。

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

有一些数据流点,数据绝对是关键的,而且是不容忍的。有时候必须在几秒钟内处理和交付它才能具有任何价值。 NiFi可以实现这些问题的细粒度流量特定配置。

使用方便

  • 可视化指挥与控制

数据流可能变得非常复杂。能够可视化这些流并在视觉上表达它们可以极大地帮助降低复杂性并确定需要简化的区域。 NiFi不仅可以实现数据流的可视化建立,而且可以实时实现。而不是“设计和部署”,它更像是塑造粘土。如果对数据流进行更改,则更改会立即生效。变更细粒度并与受影响的组件隔离。您不需要为了进行某些特定修改而停止整个流程或流程集。

  • 流程模板

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

  • 数据来源

当对象流过系统时,NiFi会自动记录,索引并提供可用的起源数据,即使是扇入,扇出,转换等。此信息对于支持合规性,故障排除,优化和其他方案至关重要。

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

NiFi的内容存储库旨在充当历史的滚动缓冲区。数据仅在内容存储库老化或需要空间时才会被删除。这与数据出处能力相结合,为对象的生命周期中的特定点提供了点击内容,内容下载和重放的极其有用的基础,甚至可以跨越几代人。

安全

  • 系统到系统

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

  • 用户到系统

NiFi支持双向SSL身份验证,并提供可插拔授权,以便能够正确控制用户的访问权限和特定级别(只读,数据流管理器,管理员)。如果用户在流程中输入密码等敏感属性,则会立即对服务器端进行加密,即使以加密形式也不会再次暴露在客户端。

  • 多租户授权

给定数据流的权限级别适用于每个组件,允许管理员用户具有细粒度的访问控制级别。这意味着每个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框架的角度来看,在增加吞吐量方面,可以在配置时增加Scheduling选项卡下处理器上的并发任务数。这允许更多进程同时执行,从而提供更高的吞吐量。另一方面,您可以完美地将NiFi缩小到适合在边缘设备上运行,因为硬件资源有限,所需的占用空间很小。要专门解决第一英里数据收集挑战和边缘使用案例,您可以在此处找到更多详细信息:https://cwiki.apache.org/confluence/display/NIFI/MiNiFi,关于Apache NiFi,MiNiFi的子项目工作(发音为“缩小”,[min-uh-fahy])。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
23天前
|
消息中间件 安全 Kafka
Apache Kafka安全加固指南:保护你的消息传递系统
【10月更文挑战第24天】在现代企业环境中,数据的安全性和隐私保护至关重要。Apache Kafka作为一款广泛使用的分布式流处理平台,其安全性直接影响着业务的稳定性和用户数据的安全。作为一名资深的Kafka使用者,我深知加强Kafka安全性的重要性。本文将从个人角度出发,分享我在实践中积累的经验,帮助读者了解如何有效地保护Kafka消息传递系统的安全性。
48 7
|
1月前
|
消息中间件 分布式计算 大数据
大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录
大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录
63 5
|
1月前
|
存储 SQL 分布式计算
大数据-162 Apache Kylin 全量增量Cube的构建 Segment 超详细记录 多图
大数据-162 Apache Kylin 全量增量Cube的构建 Segment 超详细记录 多图
58 3
|
23天前
|
消息中间件 Java Kafka
初识Apache Kafka:搭建你的第一个消息队列系统
【10月更文挑战第24天】在数字化转型的浪潮中,数据成为了企业决策的关键因素之一。而高效的数据处理能力,则成为了企业在竞争中脱颖而出的重要武器。在这个背景下,消息队列作为连接不同系统和服务的桥梁,其重要性日益凸显。Apache Kafka 是一款开源的消息队列系统,以其高吞吐量、可扩展性和持久性等特点受到了广泛欢迎。作为一名技术爱好者,我对 Apache Kafka 产生了浓厚的兴趣,并决定亲手搭建一套属于自己的消息队列系统。
45 2
初识Apache Kafka:搭建你的第一个消息队列系统
|
1月前
|
Java 大数据 数据库连接
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
29 2
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
|
1月前
|
SQL 分布式计算 NoSQL
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
29 1
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
|
23天前
|
消息中间件 canal 分布式计算
类似apache nifi的产品还有哪些?
【10月更文挑战第23天】类似apache nifi的产品还有哪些?
44 3
|
23天前
|
Java API 持续交付
apache nifi 如何进行二次开发?
【10月更文挑战第23天】apache nifi 如何进行二次开发?
46 2
|
1月前
|
分布式计算 大数据 Apache
利用.NET进行大数据处理:Apache Spark与.NET for Apache Spark
【10月更文挑战第15天】随着大数据成为企业决策和技术创新的关键驱动力,Apache Spark作为高效的大数据处理引擎,广受青睐。然而,.NET开发者面临使用Spark的门槛。本文介绍.NET for Apache Spark,展示如何通过C#和F#等.NET语言,结合Spark的强大功能进行大数据处理,简化开发流程并提升效率。示例代码演示了读取CSV文件及统计分析的基本操作,突显了.NET for Apache Spark的易用性和强大功能。
37 1
|
1月前
|
存储 大数据 分布式数据库
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
35 1

推荐镜像

更多
下一篇
无影云桌面