Apache NiFi 中处理器属性和流文件属性之间的区别

Difference Between Processor Properties and Flowfile Attributes in Apache NiFi

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

这就是为什么 UpdateAttribute 需要添加在流文件遍历数据流时与流文件一起保留的元数据的原因:

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

一个很好的问题,当每个人开始在 NiFi 中构建 data-flows 时都会想到这个问题。

首先要做的事情:属性与 FlowFile 属性

正如您自己在问题本身中提到的,Properties 是用于控制 Processor 行为的东西,而 Attributes 是 flow-in-action.

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

每个处理器都会添加一些核心属性,如 application.typefilesizeuuidpath 等,

让用户在不添加自定义属性的情况下添加自定义属性的目的是什么?

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

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

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