Разница между свойствами процессора и атрибутами потокового файла в Apache NiFi - PullRequest
0 голосов
/ 19 января 2019

Насколько я понимаю, свойства процессора NiFi специфичны для этого процессора. Таким образом, добавление нового свойства в процессор будет видно только внутри этого процессора и не будет передано в более поздние блоки процессора?

Вот почему UpdateAttribute необходимо добавить метаданные, которые остаются в файле потока при его прохождении через поток данных:

Update Attribute NiFi Processor Block

Итак, каково значение, позволяющее пользователю добавлять пользовательские свойства в процессор помимо тех, которые определены и необходимы для выполнения этого процессора? Это похоже на создание переменных, которые затем могут быть использованы в других свойствах?

Processor Block Properties

1 Ответ

0 голосов
/ 20 января 2019

Очень хороший вопрос, который приходит в голову всем, когда они начинают работать над созданием потоков данных в NiFi.

Перво-наперво: свойства против атрибутов FlowFile

Как вы сами упомянули в своем вопросе, Properties - это то, что используется для управления поведением вашего Processor, тогда как Attributes - это метаданные вашего потока в действии.

Простой пример, давайте возьмем GetFile процессор. Свойства, которые он предоставляет, например Input Directory, File Filter и т. Д., Сообщают вашему процессору, где и как искать исходные данные. Когда процессор успешно находит какой-либо источник, соответствующий вашей конфигурации, он запускает поток, то есть генерируется FlowFile. Этот FlowFile будет нести содержимое исходных данных, а также некоторые метаданные источника, такие как имя файла, размер файла, время последнего изменения и т. Д. Эти метаданные могут реально помочь вам в процессе с вашими последующими процессорами, такими как проверка типа файла и соответственно маршрутизация FlowFile. И обратите внимание, метаданные не являются фиксированными; отличается у разных процессоров.

Есть несколько основных атрибутов, которые каждый процессор добавил бы, например application.type, filesize, uuid, path и т. Д.,

Какова цель, позволяющая пользователям добавлять пользовательские свойства, когда они не добавляются в атрибуты?

Это функция, которую NiFi предлагает процессорам, которые они могут использовать или игнорировать. Не все процессоры позволяют добавлять пользовательские свойства. Только выборочные процессоры.

Давайте возьмем InvokeHttp в качестве примера. Этот процессор позволяет разработчику создавать собственные свойства. Когда пользователь добавляет новое пользовательское свойство, это свойство добавляется в качестве заголовка к HTTP-вызову, который процессор собирается сделать, потому что процессор построен таким образом. Он ищет любые динамические (пользовательские) свойства. Если они присутствуют, они будут считаться пользовательскими заголовками, которые пользователь хочет отправить.

По крайней мере, в контексте этого процессора не имеет смысла собирать эти данные заголовка как метаданные, потому что они могут быть бесполезны для последующих процессоров, но есть некоторые другие процессоры, которые работают по-другому, когда предоставляются пользовательские свойства, как UpdateAttribute, единственной целью которого является добавление любого пользовательского свойства в качестве атрибута к входящему FlowFile.

...