Первый вопрос: используйте продолжительность прогона
Новое 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
на вкладке свойств, чтобы учесть это изменение.
Подробнее об этом здесь:
Второй вопрос: проверить исходный код
При отправке одного файла много команд CWD (Изменить рабочий каталог)
посланы. Например, отправка файла в /myfiles/test/dest/file.txt
Изучив FTPTransfer.java , вы можете увидеть, что метод put делает следующее:
- поставить -> получить клиента
- put -> get client -> resetWorkingDirectory -> changeWorkingDirectory (homeDirectory)
- put -> setAndGetWorkingDirectory
Это может быть поведение, которое вы обнаружили.