Как nifi распределяет данные между разными узлами? - PullRequest
0 голосов
/ 02 октября 2019

У меня есть кластер nifi с 3 узлами. Я использую процессор invokeHTTP в потоке. По сути, есть конечная точка, которая ежедневно дает мне 1–2 ГБ данных JSON, которые я, наконец, сохраняю в POSTGRES. Поток работает нормально, но я не уверен, эффективно ли я использую весь кластер из трех узлов.

Вот два сценария, в которых я тестировал поток, в этих сценариях я просто изменяю «Выполнение». режим, присутствующий на вкладке планирования процессора invokeHTTP от «Все узлы» до «ПЕРВИЧНЫЙ УЗЕЛ»

1 - В режиме выполнения «Все узлы» я вижу, как 3 запроса передаются из invokeHTTP следующему процессору. Таким образом, вместо только 2 ГБ ответа json я вижу, что 6 ГБ ответа передается следующему процессору, что означает, что все 3 узла делают одно и то же, что приводит к ненужной нагрузке на кластер и базу данных.

2-В режиме выполнения «Основной узел» я вижу 1 запрос, передаваемый из invokeHTTP следующему процессору. Но я думаю, что в этом случае используется только один узел, а два других узла ничего не делают, что не является правильным использованием кластера.

Каков правильный подход для использования всего кластера?

1 Ответ

0 голосов
/ 02 октября 2019

Обычно NiFi не перемещает данные между узлами автоматически, если вы не настроили поток данных для этого. В вашей ситуации вы хотите, чтобы InvokeHttp выполнялся только на одном узле, поэтому его следует устанавливать только как основной узел.

После этого все зависит от того, можно ли разбить ответ на отдельные части. Если 2 ГБ JSON можно разделить на более мелкие потоковые файлы, то вы можете использовать соединение с балансировкой нагрузки для распределения меньших фрагментов по другим узлам кластера, но если этого не может быть, вам придется запустить весь поток натолько основной узел.

https://blogs.apache.org/nifi/entry/load-balancing-across-the-cluster

...