Повторное использование службы контроллера NiFi и архитектура реестра схем - PullRequest
1 голос
/ 12 мая 2019

При создании сервисов контроллеров Apache NiFi мне интересно узнать, когда имеет смысл создавать новые, а когда делиться существующими.

В настоящее время у меня есть CsvReader и CSVRecordSetWriter в корневой группе процессов, и они активно используются в дочерних группах процессов.Я попытался настроить их так, чтобы они были максимально динамичными и гибкими, чтобы охватить максимально возможное количество вариантов использования.Я устанавливаю свойство «Текст схемы» в каждом из них в настоящее время следующим образом:

Reader Schema Text: ${avro.schema:notNull():ifElse(${avro.schema}, ${avro.schema.reader})}
Writer Schema Text: ${avro.schema:notNull():ifElse(${avro.schema}, ${avro.schema.writer})}

Очень распространенный шаблон, который у меня есть, заключается в сопоставлении файлов с разными полями из разных источников в общий формат (общая схема).Поэтому одной из идей является использование процессоров ConvertRecord или UpdateRecord с атрибутами avro.schema.reader и avro.schema.writer, установленными для схем ввода и вывода.Тогда я бы сделал так, чтобы писатель всегда устанавливал атрибут avro.schema, поэтому каждый раз, когда я снова читаю записи дальше в потоке, по умолчанию используется avro.schema.Это кажется грязным, чтобы оставить атрибуты схемы читателя и писателя висящими вокруг.Есть ли лучший способ с точки зрения архитектуры?Почему тонны служб контроллеров находятся на разных уровнях?Помимо некоторых настроек, которые могут потребоваться для некоторых случаев использования, я что-то упускаю?

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

1 Ответ

0 голосов
/ 18 мая 2019

В итоге я решил, что имеет смысл разделить контроллер на два контроллера.Один для преобразований из Схема A в Схема B , а другой для использования того же свойства avro.schema, что и обычные / стандартные читатели и пишущие устройства при добавлении новых.Это позволяет явно выбирать правильный шаблон во время конфигурации блока процессора, а не полагаться на неявную конфигурацию одного процессора.Кроме того, вы получаете дополнительное преимущество, заключающееся в том, что вы не останавливаете все потоки (только подмножество), когда вам нужно только настроить параметры одного из этих двух шаблонов.

...