NiFi putFTP не эффективен - PullRequest
1 голос
/ 09 июля 2019

У меня есть поток nifi, который отправляет более 50 файлов в минуту, используя процессор putFTP.Сервер имеет ограниченные ресурсы, но мне нужно отправить в более быстром темпе.Я посмотрел журналы ftp-сервера (не nifi) и пришел к выводу:

  • Для каждого файла создается новое ftp-соединение (сеанс).Есть ли возможность настроить много файлов за один сеанс?(подключитесь к порту 21, выполните аутентификацию один раз, а затем отправьте множество файлов на разные порты)
  • При отправке одного файла отправляется много команд CWD (Изменить рабочий каталог).Например, отправка файла в /myfiles/test/dest/file.txt:

    • CWD /
    • CWD / myfiles
    • CWD /
    • CWD / myfiles / test
    • CWD /
    • CWD / myfiles / test / dest

Этоне эффективно.Есть ли способ улучшить putFTP?Это ошибка?

1 Ответ

1 голос
/ 09 июля 2019

Первый вопрос: используйте продолжительность прогона

Новое FTP-соединение (сеанс) создается для каждого файла. Есть возможность настроить много файлов за один сеанс? (подключитесь к порту 21, аутентифицируйтесь один раз, а затем отправьте много файлов на разные порты)

Во-первых, (если это соответствует вашему варианту использования) вы можете использовать процессор MergeContent , чтобы объединить несколько (меньших) потоковых файлов в один (больший) потоковый файл и передать его в PutFTP.

Во-вторых, PutFTP имеет аннотацию SupportsBatching :

Маркерная аннотация, которую реализация Процессора может использовать, чтобы указать, что пользователи должны иметь возможность указывать длительность пакета для процессора. Если Процессор использует эту аннотацию, это позволяет платформе пакетные коммиты ProcessSessions, а также позволяющие платформе возвращать один и тот же ProcessSession несколько раз ...

Источник: https://github.com/apache/nifi/blob/master/nifi-api/src/main/java/org/apache/nifi/annotation/behavior/SupportsBatching.java

Увеличьте продолжительность работы вашего процессора PutFTP в сторону большей пропускной способности, чтобы использовать одну и ту же задачу для многих потоковых файлов. Вы можете настроить Maximum Batch Size на вкладке свойств, чтобы учесть это изменение.

enter image description here

Подробнее об этом здесь:

Второй вопрос: проверить исходный код

При отправке одного файла много команд CWD (Изменить рабочий каталог) посланы. Например, отправка файла в /myfiles/test/dest/file.txt

Изучив FTPTransfer.java , вы можете увидеть, что метод put делает следующее:

  • поставить -> получить клиента
  • put -> get client -> resetWorkingDirectory -> changeWorkingDirectory (homeDirectory)
  • put -> setAndGetWorkingDirectory

Это может быть поведение, которое вы обнаружили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...