Процессор NiFi берет миллионы задач и решает их - PullRequest
0 голосов
/ 29 сентября 2019

Я создал процессор. Когда происходит сбой PutFile (из-за того, что файл уже существует), я хочу переименовать файл из myfile.JPG в myfile_1.JPG в myfile_2.JPG и так далее, пока PutFile не будет успешным. «myfile» не должен иметь подчеркивания где-либо в имени файла до тех пор, пока не произойдет эта обработка.

nifi

Мой поток выглядит так: PutFile -> UpdateAttribute -> PutFile (loopped)

${filename:contains('_'):ifElse(   
 ${filename:substringBeforeLast('_'):append('_'):append(${filename:substringAfterLast('_'):substringBefore('.'):plus(1)}):append('.'):append(${filename:substringAfter('.')})},
 ${filename:substringBefore('.'):append('_1.'):append(${filename:substringAfter('.')})}     
)}

Пример входного имени файла: 2017-06-15-175053.JPG

Пример выходного имени файла: 2017-06-15-175053_1.JPG

Пример имени входного файла:2017-06-15-175053_1.JPG

Пример выходного файла: 2017-06-15-175053_2.JPG

Сначала я проверяю, существует ли "_" в имени файла (ожидается входное имя файлане содержит его до тех пор, пока не будет запущен мой процессор Имени Инкремента)

Если «_» существует, возьмите число между «_» и «.» и увеличьте его, если «_» не существует, добавьте «_».JPG "до конца.

Ожидаемые результаты: немедленное увеличение имени файла до успешного завершения PutFile.

Фактические результаты: через несколько минут после выполнения миллионов задач файл, наконец, переименовывается в"myfile_6.JPG "и я не уверен, почему так много итераций.

1 Ответ

3 голосов
/ 29 сентября 2019

PutFile штрафует файл потока при сбое.

И по умолчанию Penalty duration = 30sec. Это означает, что следующий процессор (UpdateAttribute) не будет обрабатывать этот файл в течение 30 секунд.

Вы можете установить это время на 0sec, чтобы избежать этой задержки на вкладке Settings в Configuration из PutFile процессор. Поэтому следующий процессор не будет ждать обработки сбойного файла.

...