Apache NiFi中处理器属性和Flowfile属性之间的差异

时间:2019-01-19 18:23:33

标签: etl apache-nifi dataflow hortonworks-dataflow

我目前的理解是NiFi处理器属性特定于该处理器。那么,向处理器添加新属性将仅在该处理器中可见,而不会传递给以后的处理器块吗?

这就是为什么UpdateAttribute对于添加在流文件中遍历数据流时保留在流文件中的元数据的原因:

Update Attribute NiFi Processor Block

那么,允许用户在处理器中添加自定义属性(超出该处理器执行所定义和要求的属性)的价值是什么?类似于创建可以在其他属性中使用的变量吗?

Processor Block Properties

1 个答案:

答案 0 :(得分:6)

一个非常好的问题,当每个人开始在NiFi中构建数据流时就会想到这个问题。

第一件事:属性与FlowFile属性

正如您自己在问题本身中提到的那样,Properties是用于控制Processor行为的事物,而Attributes是行动流程的元数据。

一个简单的示例,让我们使用GetFile处理器。它公开的属性(如Input DirectoryFile Filter等)告诉您的处理器在哪里以及如何查找源数据。当处理器成功找到与您的配置匹配的源时,它将启动该流程,这意味着将生成FlowFile。该FlowFile将携带源数据的内容以及源的一些元数据,例如文件名,文件大小,上次修改时间等。该元数据实际上可以帮助您降低后续处理器的处理流程,例如检查文件的类型并相应地路由FlowFile。请注意,元数据不是固定的。随处理器不同而不同。

每个处理器都会添加的核心属性很少,例如application.typefilesizeuuidpath等,

让用户在未添加自定义属性时将其添加到属性的目的是什么?

此功能是NiFi提供给处理器的一种功能,它们可以使用或忽略它们。并非所有处理器都允许添加自定义属性。只有选择性处理器可以。

我们以InvokeHttp为例。该处理器允许开发人员创建自定义属性。当用户添加新的自定义属性时,该属性将作为标头添加到处理器将要进行的HTTP调用中,因为处理器是以这种方式构建的。它查找任何动态(自定义)属性。如果存在,则将其视为用户要发送的自定义标头。

至少,在此处理器的上下文中,将标头数据捕获为元数据是没有意义的,因为它对于后续处理器可能没有用,但是当提供自定义属性时,某些其他处理器的行为会有所不同,像UpdateAttribute一样,其唯一目的是将任何自定义属性作为属性添加到传入的FlowFile中。