NIFI
1、NIFI历史
NSA创造了Nifi,并且使用了8年。在2014年将其贡献给了Apache开源社区,2015年的时候成为了顶级项目。是一个用户友好,可扩展且可靠的,专为处理数据流而诞生的,数据处理和分发系统。
2、NIFI特点
用户友好:使用者可以完全通过基于web页面的可视化工具,通过拉拽、链接、配置,完成一个数据处理和分发流程。还可以保存一个通用的数据流处理模板,套用到其它处理流程上。
可扩展:Nifi有两个版本,既可以本地使用,也可以在分布式的集群环境下使用。
可靠:Nifi有保证交付(通过持久化预写日志和内容存储实现),背压缓冲(即上游产生过多数据,下游一时消化不了的话,提供缓冲功能,等待下游消费)两个特点,保证处理过程中的可靠性。
数据处理和分发系统:主要用于连接不同种类,不同格式,来自不同系统的文件,并在合适的处理后将它们分发到它们应该去的地方。
3、NIFI核心组件
如上图所示,为NiFi架构图。NiFi在安装有JVM的主机系统内运行。NiFi在JVM内运行的主要组件有:
Web Server:承载NiFi基于HTTP的命令和控制API;
Flow Controller:NiFi执行具体操作的大脑,负责从线程资源池中给Processor分配可执行的线程,以及其他资源管理调度的工作;
FlowFile Repository:负责保存在目前活动流中FlowFile的活跃状态,其功能实现是可插拔的。默认的方式是通过一个存储在指定磁盘分区的持久预写日志,来实现此功能。
Content Repository:负责保存在目前活动流中FlowFile的实际字节内容,其功能实现是可插拔的。默认的方式是一种相当简单的机制,即存储内容数据在文件系统中。多个存储路径可以被指定,因此可以将不同的物理路径进行结合,从而避免达到单个物理分区的存储上限。
Provenance Repository:负责保存所有跟踪事件数据,同样此功能是可插拔的,并且默认可以在一个或多个物理分区上进行存储,在每个路径下的事件数据都被索引,并且可被查询。
Nifi也支持用户自定义Processor,例如通过继承NiFi定义的AbstractProcessor类。自定义的Processor可以和内建的Processor一样添加到NiFi定义Flow的GUI上,并对其进行配置。
4、NIFI单机简单实现案例
5、NIFI集群架构
NiFi Cluster采用无leader模式,即在部署时所有集群节点都是相同的配置没有主节点和从节点的区别。每个节点都有同样的数据流程定义,执行相同的任务,但处理不同的数据。 NiFi使用zooKeeper做为协调服务。集群启动时,一个节点被选出做为协调节点,其他节点向它发送心跳信息和状态报告。当新节点选择加入集群时,新节点必须首先连接到集群协调节点,以下载最新的数据流程。如果集群协调节点确定允许节点加入,则当前数据流程将提供给该节点,并且该节点能够加入集群,但新节点的数据流程副本与集群协调节点提供的副本必须匹配。如果新节点的数据流程配置版本与集群协调节点的版本不同,则新节点将被拒绝加入集群。
5.1、NIFI不同节点数据传输处理能力比较
使用8个processor的情况下的数据传输处理能力比较:
节点数 | 传输能力 | 每五分钟的传入数据 |
---|---|---|
单节点 | 0.18803 GB /秒 | 56.41 GB |
5个节点集群 | 0.8814 GB /秒 | 264.42 GB |
25个节点集群 | 0.8814 GB /秒 | 1.71 TB |
6、NIFI和其它流式框架比较
6.1、STORM
Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop。随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统(高频交易、股票)等等,大数据实时处理解决方案(流计算)的应用日趋广泛,目前已是分布式技术领域最新爆发点,而Storm更是流计算技术中的佼佼者和主流。 storm是以topologies为单位,来运行作业,一个topology是由Spouts(数据的产生源头)、Bolts(处理数据的逻辑)、tuples(传输数据,此数据是封装到tuples对象实现)组成。主要使用在推荐系统(实时推荐,根据下单或加入购物车推荐相关商品)、金融系统、预警系统、网站统计(实时销量、流量统计,如淘宝双11效果图)、交通路况实时系统等等。
6.2、FLINK
被称为第四代大数据处理。Storm提供了低延迟的流处理,但是为了实时性付出了一些代价,很难实现高吞吐。低延迟和高吞吐流处理系统中维持良好的容错性很困难,但是人们想到了一种替代方法:将连续时间中的流数据分割成一系列微小的批量作业。这就是Spark批处理引擎上运行的Spark Streaming所使用的方法。Flink分别提供了面向流式处理的接口和面向批处理的接口。Flink提供了用于流处理的DataStream API和用于批处理的DataSet API。Flink的分布式特点体现在它能够在成百上千机器上运行,它将大型计算任务分成许多小的部分每个机器执行一部分。Flink 整个系统主要由两个组件组成,分别为 JobManager 和 TaskManager,Flink 架构也遵循 Master - Slave 架构设计原则,JobManager 为 Master 节点,TaskManager 为 Worker (Slave)节点。JobManager 相当于整个集群的 Master 节点,且整个集群有且只有一个活跃的 JobManager ,负责整个集群的任务管理和资源管理。TaskManager 相当于整个集群的 Slave 节点,负责具体的任务执行和对应任务在每个节点上的资源申请和管理。TaskManager 从 JobManager 接收需要部署的任务,然后使用 Slot 资源启动 Task,建立数据接入的网络连接,接收数据并开始数据处理。同时 TaskManager 之间的数据交互都是通过数据流的方式进行的。
7、NIFI、FLINK在数据中台中的使用
参看考资料:
nifi安装包下载地址:
Index of /dist/nifi/1.9.2 默认的端口是8080 默认http访问
1.14及1.15 默认 https访问 , 默认端口 8443 https 访问 需要登录
docker命令在linux服务器上安装nifi,指定端口为9092
docker run --name nifi -p 9092:9090 -d -e NIFI_WEB_HTTP_PORT='9090' apache/nifi:1.13.2