NiFi Processors概述

2020-11-18  本文已影响0人  一个老冯

为了能够创建一个高效的NiFi数据数据流程,我们需要了解有哪些Processor类型可以使用。每个新的NiFi版本Processor数量都会增加,当前NiFi版本为1.12.1,内置了288个类型的Proccessor,这些Processor提供从多个不同系统接收数据、路由、转换、处理、拆分和聚合数据以及将数据分发到多个系统的功能。

按照功能分类:


image.png

. procesor 分类说明

1.1 数据摄取

1.2. 数据转化

1.3. 路由与中介

1.4. 数据库访问

1.5. 属性提取

1.6. 系统交互

1.7.数据出口/数据发送

1.8. 拆分与合并

1.9. http

1.10. amazon web services

2.操作属性

每个FlowFile创建时都有几个属性,并且属性将在FlowFile的生命周期内发生变化。 属性这个概念提供了三个主要好处:

2.1 一般属性(系统属性)

所有FlowFile都会有的属性一个最小的属性集合,一般由NiFi进行维护 :

这些属性都是系统生成的不能修改。

2.2 提取属性

NiFi提供了几种开箱即用的Processor,用于从FlowFiles中提取属性。同样,这也是构建自定义Processor的常见的例子。 许多Processor被编写来处理特定的数据格式,并从FlowFile的内容中提取相关信息,创建属性来保存该信息,以便随后就如何路由或处理数据做出决策。

2.3 添加用户自定义属性

除了使Processor能够从FlowFile内容中提取特定信息到属性外,用户还需要在数据流程中的特定位置向每个FlowFile添加用户定义属性。“UpdateAttribute Processor”专为此目的而设计。通过单击“属性”选项卡右上角的“ +”按钮,用户可以在“配置”对话框中向Processor添加新属性。然后提示用户输入属性的名称,然后输入值。对于此UpdateAttribute Processor处理的每个FlowFile,将为会把用户定义的属性添加到FlowFile属性中。属性的名称将与添加的属性的名称相同。属性的值将与属性的值相同,属性的值也可以包含表达语言。这允许基于其他属性修改或添加属性。例如,如果要在处理文件的主机名和日期前加上文件名,则可以通过添加名称为“ filename”和值为“{hostname()}-{now():format('yyyy-dd-MM')}-${filename}”的属性来实现,这需要用户熟悉NiFi表达式语言。 除了固定添加一组定义的属性外,UpdateAttribute Processor还具有一个高级UI,该UI允许用户配置一组规则,在这些规则上应添加属性。要使用此功能,请在“配置”对话框的“属性”标签中,点击对话框底部的“高级”按钮。这是提供专门针对此processor定制的UI,其他Processor没有此功能。在此UI内,用户能够配置规则引擎,从本质上讲,指定必须匹配的规则才能将已配置的属性添加到FlowFile。

2.4 属性路由

NiFi最强大的功能之一是能够基于FlowFile的属性来路由它们。执行此操作的主要方法是RouteOnAttribute Processor。该Processor与UpdateAttribute一样,是通过添加用户定义的属性来配置的。通过单击“Processor”的“配置”对话框中“属性”选项卡右上角的“ +”按钮,可以添加任意数量的属性。 每个FlowFile的属性都将与配置的属性进行比较,以确定FlowFile是否满足指定的条件。每个属性的值都应为表达式语言表达式,并返回布尔值。 在计算了针对FlowFile的属性提供的表达语言表达式后,Processor将根据所选的路由策略确定如何路由FlowFile。最常见的策略是“路由到属性名称”策略。选择此策略后,Processor将为每个配置的属性创建一个关系。如果FlowFile的属性满足给定的表达式,则FlowFile的副本将被路由到相应的Relationship。例如,如果我们有一个名称为“ begins-with-r”且值为“ $ {filename:startsWith('r')}”的新属性,则任何文件名以字母“ r”开头的FlowFile都将是路由到该关系。所有其他FlowFiles将被路由到“ unmatched”。

2.5 表达式语言 / Using Attributes in Property Values

从FlowFiles的内容中提取属性并添加用户定义的属性时,除非我们有某种使用它们的机制,否则它们对我们作为操作没有多大帮助。 NiFi表达式语言使我们能够在配置流程时访问和操作FlowFile属性值。并非所有处理器属性都允许使用表达式语言,但许多属性都可以使用。为了确定属性是否支持表达式语言,用户可以将鼠标悬停在“帮助”图标(

image.png
)在“Processor configure”对话框的“Propreties”选项卡中。这将提供一个工具提示,显示该属性的描述,默认值(如果有)以及该属性是否支持表达式语言。
image.png
对于支持表达式语言的属性,可以通过在开始的"{"和结束的"}"标签内添加一个表达式来使用它。表达式引用属性值非常简单。例如,要引用“ uuid”属性,我们可以简单地使用值“ {uuid}”。如果属性名称以字母以外的其他字符开头,或者包含数字,字母,句点(。)或下划线(_)以外的其他字符,则需要用引号引起来。例如,“ {My Attribute Name}”将是无效的,但是“ {'My Attribute Name'}”将指向属性“My Attribute Name”。
除了引用属性值外,我们还可以对这些属性执行许多功能和比较。例如,如果我们要检查filename属性是否包含字母'r'而不注意大小写(大写或小写),则可以使用表达式${filename:toLower():contains('r')}。注意这里的功能用冒号分隔。我们可以将任意数量的函数链接在一起以构建更复杂的表达式。同样重要的是,即使我们正在调用filename:toLower(),这也不会改变filename属性的值,而只是为我们提供了一个新的值。
我们还可以将一个表达式嵌入另一个表达式中。例如,如果我们想将“ attr1”属性的值与“ attr2”属性的值进行比较,则可以使用以下表达式来做到这一点:$ {attr1:equals($ {attr2})}
表达式语言包含许多功能,可用于执行路由和处理属性。函数(Functions)用于解析和处理字符串,比较字符串和数字值,处理和替换值以及比较值。 此外,表达式语言文档内置于应用程序中,因此用户可以在键入时轻松查看可用的功能并查看其文档。设置支持表达式语言的属性的值时,如果光标位于表达式语言的开始和结束标记之内,则按关键字上的Ctrl +空格键将弹出所有可用功能,并且会自动完整的功能。单击或使用键盘导航到弹出窗口中列出的功能之一,将显示一个工具提示,其中解释了该功能的作用,期望的参数以及该函数的返回类型。

2.6 表达式语言中的自定义属性

除了使用FlowFile属性外,还可以定义用于表达语言的自定义属性。 自定义属性使在处理和配置数据流时具有更多的灵活性。 例如,可以引用连接,服务器和服务属性的自定义属性。 创建自定义属性后,可以在“ nifi.properties”文件中的“ nifi.variable.registry.properties”字段中标识它们的位置。 更新“ nifi.properties”文件并重新启动NiFi之后,便可以根据需要使用自定义属性。

上一篇 下一篇

猜你喜欢

热点阅读