Как перенести кластерное состояние процессора NiFi - PullRequest
0 голосов
/ 27 января 2020

Случай, с которым я столкнулся, заключается в следующем: в нашем рабочем процессе все разработчики вносят изменения в dev-среду и фиксируют измененную группу процессоров PG, экспортируя ее как шаблон XML. Другие парни удаляют старую рабочую PG и устанавливают новую PG из этого шаблона в тестовом (prod) -области.

Я пытался сохранить состояние процессоров Statefull этого PG восстановить его после такой «переборки». И этот шаг легко сделать с помощью приятного NiFi REST API:

/nifi-api/processors/{id}/state   Gets the state for a processor

А потом мне нужно его вернуть. Предположим, что поиск соответствующих идентификаторов GUID Porcessors уже сделан - хорошо, руководства являются новыми, но это «не кажется» проблемой. Я не могу вернуть состояние:

Я обнаружил (особенно, исследуя TestAbstractListProcessor.java), что если у меня есть GUID процессора и помещен файл conf/state/<proc-guid> со специальным форматированным содержимым, например: param={json-params} затем после того, как Первый (и только первый) процессор запустит migrates свое состояние из этого файла (а затем удалит его). Второй вариант, который я нашел, - это непосредственно поместить состояние CLUSTER (мне нужны только процессоры CLUSTER statefull) в путь Zookeeper /nifi/components/<guid>.

Но есть проблема - это не работает вообще после изменение свойств процессора. Поэтому я даже не могу создать Процессор, изменить ( исходное установить) его состояние, снабдить conf/state/<proc-guid> (или установить /nifi/components/<guid>) и запустить в первый раз. Код (например, AbstractListProcessor.java) видит, что произошли некоторые изменения свойств, и отбрасывает уже прочитанное состояние.

Как правильно перенести состояние CLUSTE процессора NiFi в случай обновления NiFi Processors Group? По некоторым причинам (которые я еще не понял) API-интерфейс NiFi REST позволяет только get и clear состояние процессоров, но не set это:

/nifi-api/processors/{id}/state/clear-requests   Clears the state for a processor
But there is no set-state API
...