使用java开发的一个开源项目,数据处理工具

1.简介:

NiFi 是一个易于使用、功能强大而且可靠的流式数据处理和分发系统。NiFi 是为数据流设计,支持从多种数据源动态的拉取数据,并基于WEB图形界面,通过拖拽、连接、配置完成基于流程的编程,实现数据采集、处理等功能。

2. 架构:

neon 架构 nifi架构_数据

  • Web Server:承载NiFi基于HTTP的命令和控制API。
  • Flow Controller:NiFi执行具体操作的大脑,负责从线程资源池中给Processor分配可执行的线程,以及其他资源管理调度的工作。
  • Extensions:NiFi扩展功能,可以扩展processor以及其它的组件。
  • Processor:processor是各种处理插件执行器,我们可以从中选择一个或者一组进行执行。
    Processor 处理器是用于监听传入数据的NiFi组件; 从外部来源提取数据; 发布数据到外部来源; 并从FlowFiles中路由,转换或提取信息。
  • ProcessGroup:进程组是一组特定的进程及其连接,允许组合其他组件创建新组件。
    ProcessGroup 是特定的一些processor,connnection的集合,这一组集合被定义成新的逻辑上的Processor,我们可以像普通的processor一样操作它。
  • FlowFile Repository:负责保存在目前活动流中FlowFile的状态,其功能实现是可插拔的。默认的方式是通过一个存储在指定磁盘分区的持久预写日志(WAL),来实现此功能。
  • Content Repository:负责保存在目前活动流中FlowFile的实际字节内容,其功能实现是可插拔的。默认的方式是一种相当简单的机制,即存储内容数据在文件系统中。多个存储路径可以被指定,因此可以将不同的物理路径进行结合,从而避免达到单个物理分区的存储上限。
  • Provenance Repository:负责保存所有跟踪事件数据,同样此功能是可插拔的,并且默认可以在一个或多个物理分区上进行存储,在每个路径下的事件数据都被索引,并且可被查询。
  • FlowFile:表示通过系统移动的每个对象,包含数据流的基本属性。flowfile是系统传输的对象,里面包含各种属性key/value对以及真正的数据content。
    flowfile作为数据流动的载体,由FlowFile属性和FlowFile内容两部分组成。 属性是提供关于数据的信息或上下文的特性,它们由键值对组成;内容是由FlowFile表示的数据。
    所有FlowFiles都具有以下标准属性:
  • uuid :FlowFile的唯一标识
  • filename :将数据存储到磁盘或外部服务时可以使用的可读文件名
  • path :在将数据存储到磁盘或外部服务时可以使用的分层结构化值,以便数据不会存储在单个目录中。
  • FlowFile Prcessor:负责实际对数据流执行工作。
  • Connection:负责不同处理器之间的连接,是数据的有界缓冲区。
  • Relationship :每个处理器具有零个或多个为其定义的关系。 这些关系被命名以表示处理FlowFile的结果。 处理器处理完FlowFile之后,它会将FlowFile路由(或“传送”)到其中一个关系。

3. 基本特性

  • 支持优先排队:nifi允许设置一个或多个优先级方案(先进先出,先进后出,最大先出),可以为每一个connection单独配置。
  • 支持数据缓冲和数据背压:nifi可以为每一个connection单独配置配置缓冲queue,背压值,保证系统平稳快速运行。
  • 保证数据交付:持久性预写日志(WAL)和content repository,可以实现非常高的事务处理,高效的负载分散,写入时复制以及发挥传统磁盘读/写的优势,保证在大规模情况依然不丢失数据。
  • 可视化操作:使用方可以通过可视化的数据流展现与编辑功能,使得用户在编辑和处理数据流时更加直观,从而提升使用效率。
  • 数据跟踪:nifi会自动记录数据流的每个操作日志,并可以从日志里回复数据。
  • 租户隔离:指定数据流的权限适用于每个组件,允许管理员用户具有细粒度的访问控制。这意味着每个NiFi集群都能够处理一个或多个组织的要求。与隔离方式相比,多租户授权支持数据流管理的自助服务模型,允许每个团队或组织在完全了解流的其余部分的情况下管理流,而无法访问流。
  • 扩展性:用户可以扩展自己的processor,优先级排序,用户界面,控制器等,同时集群支持横向扩展,保证集群的处理能力。

4. 整体简介

neon 架构 nifi架构_neon 架构_02

 

5. 系统安装

nifi可以单机运行也可以集群运行,集群运行只是在单机的基础上配置zookeepr(可以配置外部zookeeper也可以用内置的)

单机安装:

wget https://archive.apache.org/dist/nifi/1.13.2/nifi-1.13.2-bin.tar.gz

#解压安装包

tar -zxvf nifi-1.13.2-bin.tar.gz

进入conf目录修改nifi.properties文件,配置参数

nifi.web.http.host=192.168.1.3

nifi.web.http.port=8085

进入bin目录启动nifi

./nifi.sh start

浏览器输入http://192.168.1.3:8085/nifi

neon 架构 nifi架构_数据_03

至此nifi安装完毕,可以开始数据同步配置啦!

作为功能强大的数据处理和分发组件,NiFi自然原生支持集群部署方式(推荐部署方式)。NiFi集群部署模式如下图:

neon 架构 nifi架构_数据_04

  

Cluster Coordinator:集群协调器,用来进行管理节点添加删除的操作逻辑

Primary Node:主节点,用来运行一些不适合在集群中运行的组件

Zookeeper Client:zk节点(故障转移)

集群模式下,NiFi集群中的每个节点对数据执行相同的任务,但是每个节点都在不同的数据集上进行操作。和大部分大数据组件一样,NiFi集群使用Apache ZooKeeper提供协调服务。 Apache ZooKeeper选择一个NiFi节点作为集群协调器,故障转移由ZooKeeper自动处理。 所有集群节点向集群协调器报告心跳和状态信息。集群协调器负责节点的断开和连接。 此外,ZooKeeper会为每个集群选举一个节点作为集群主节点。 作为DataFlow管理器,您可以通过任何节点的用户界面(UI)与NiFi集群进行交互。您所做的任何更改都会同步到集群中的所有节点,从而允许多个入口点。