Apache Nifi

2.2.4 NiFi创建数据流
在创建NiFi数据流之前,先回顾下上一章节提到的两个重要术语:FlowFile和处理器单元,这两个是数据流的重要概念,对于我们理解并创建数据流有很大的帮助。
FlowFile:数据流中的任何的用户数据都以FlowFile的形式存在。FlowFile包括两部分:正文和属性;其中正文指的是数据本身的内容,而属性则是对数据进行描述的键值对。
处理器单元:处理器单元是NiFi数据流的重要组成部分,它负责完成对数据的生成,发送,接收,转化,路由,切分,合并等处理。在NiFi中创建任何一个简单的数据流都离不开至少一个处理器单元。
添加处理器单元

现在我们就从在画布上添加处理器单元来开始我们的NiFi之旅吧。在控制台画布的左上角有一个()的角标,点击这个角标并将它拖拽到控制台的画布上然后松开鼠标。在这个时候将会弹出处理器单元选择对话框来让我们选择我们需要添加的处理器单元,如图

Apache Nifi

从图中我们可以看到,NiFi已经有很多的,可以直接拿来用的处理器单元,并且按照NiFi的开发规范要求,每个处理器单元都有自己的标签和隶属于的分组,对于一个NiFi新手来说,这样的分组和标签大大的降低了他们的学习和使用成本。我们可以根据我们的需求在查询窗口中输入一些关键字,NiFi会根据这些关键字查询处理器单元已定的标签和分组,以及名称,从而列出所有相关的处理器单元供使用者选择。例如,我们需要一个处理器能够获取本机路径下的文件作为数据流的源端,那么我们直接在搜索窗口中输入File,查询后我们就看到很多的与File相关的处理器单元,当我们选中某个处理器单元的时候,在弹出框的下方就能看到对于这个处理器单元的用途说明,这里我们选择GetFile这个处理器单元来获取本地磁盘上的文件,选择成功后我们双击或者点击弹出框右下角的ADD按钮,此时在我们原先的空白画布上就多了一个GetFile处理器单元。
配置处理器单元
处理器单元添加完成后,要想让处理器单元能够正常工作,我们还需要对处理器单元的属性进行配置。处理器单元的属性一般分为两种:必填和可选,以GetFile处理器单元为例,要想获取本地磁盘的文件,必须给GetFile处理器单元配置目标文件路径必填属性。

我们将鼠标移至控制台画布上的GetFile处理器单元模块上,点击右键选择Configure,这是会弹出GetFile这个处理器单元的属性配置页面,如图

Apache Nifi

从图中可以看出,属性配置页面有4个Tab页,分别为设置,调度,属性和描述,我们先选择属性Tab页,其它的Tab先保持默认配置,在后面的章节中我们会详细的介绍。在属性Tab页中会列出很多的配置属性,如

Apache Nifi

当对所需要填写的属性不是十分熟悉和了解的时候,我们可以点击来获取相应属性的说明,如图

Apache Nifi

在说明中有的会给出默认值的建议和是否支持NiFi表达式语言,关于NiFi的表达式语言在后面我们会详细说明。

回到我们的例子中,假设在NiFi安装的机器上有个/usr/local/demo/demo.txt文件,对于GetFile处理器单元来说,要想获取文件就必须填写Input Directory属性为/usr/local/demo,如图

Apache Nifi

完成后点击属性配置页面右下角的ADD按钮,完成配置。
连接处理器单元
每个处理器都会被定义一个叫“Relationships”的属性,这个属性的主要作用是当处理单元完成FlowFile的处理后,这些FlowFile会根据处理单元内部的逻辑将被分发到这些“Relationships”其中的一个,那么当数据流后续的处理器单元连接到这个“Relationships”后,就能够接着对输出的FlowFile做进一步的逻辑处理或者转换。举个例子来说,许多的处理器单元都被定义了两个“Relationships”,一个是success,另外一个是failure.我们可以把处理器能正常处理的FlowFile配置到success这个“Relationships”而把处理器单元由于某些原因而不能正常处理的FlowFile配置到failure这个“Relationships”中。

之前配置的GetFile处理单元,我们可以看到在处理器单元的左上方有个的标志,当我们鼠标移到这个标志的时候,会看到提示如图

Apache Nifi

说明处理器单元由于没有配置好“Relationships”,导致处理器单元不能正常工作。为了让GetFile处理器单元能够正常的工作,下面我们在画布上添加另外一个处理器单元,让GetFile处理器单元的“Relationships”与新加的处理器单元之间建立连接关系。我们可以选择一个比较简单的处理器单元LogAttribute,简单的将GetFile获取文件内容形成的FlowFile流向LogAttributes处理器单元,这样LogAttribute就将FlowFile的内输出到NiFi的日志中去。如

Apache Nifi

我们将鼠标移至GetFile处理器单元,我们会看见,点击它并将其拖拽到LogAttributes上,松开鼠标如图

Apache Nifi

点击ADD,此时GetFile和LogAttribute的左上角都出现了的角标,这表明完成一个简单的完整的数据流创建,如图

Apache NifiNiFi Queue配置

右击GetFile和LogAttribute之间的Queued,选择Configure,弹出关于Queued的配置页面,如图

Apache Nifi

这里需要重点说一下Queued的调度原则,Queued可以理解为FlowFile的集合,Queued的调度策略支持先进先出,新的先出,老的先出,优先级这4中调度策略来满足业务对FlowFile的不同的要求,这一点对于一些业务十分的重要,在后面我们会逐步提及。我们采用拖拽的方式将选择的调度策略放入Selected Prioritizers及完成配置,如图

Apache Nifi