В моем случае у меня кончились дескрипторы открытых файлов, и, к сожалению, ошибка не указывает на это.Как я понял, это было:
Запрос диагностики NiFi.Например: curl http://localhost:8080/nifi-api/system-diagnostics
Проверьте все «свободные» поля (например, «anceanceRepositoryStorageUsage.freeSpace ») и убедитесь, что у вас достаточно ресурсов.
Для меня это возвращаемые значения, такие как:
flowFileRepositoryStorageUsage.totalSpaceBytes=-1
-1 сообщается, когда NiFi не может определить эти значения.Правильное сообщение об ошибке будет зарегистрировано как часть диагностики.Возможно, вам придется быстро проверить журналы.В моем случае я настроил скользящие журналы, поэтому сообщение журнала быстро исчезало (так много процессоров регистрировали сбои и заполняли журналы).Ошибка выглядела так:
2019-06-03 18:48:59,619 ERROR [pool-10-thread-1] org.apache.nifi.controller.repository.WriteAheadFlowFileRepository Unable to checkpoint FlowFile Repository due to java.io.FileNotFoundException: ./flowfile_repository/journals/8243.journal (Too many open files)
java.io.FileNotFoundException: ./flowfile_repository/journals/8243.journal (Too many open files)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.\u003cinit\u003e(FileOutputStream.java:213)
at java.io.FileOutputStream.\u003cinit\u003e(FileOtutputStream.java:162)\n\tat org.apache.nifi.wali.LengthDelimitedJournal.getOutputStream(LengthDelimitedJournal.java:136)
at org.apache.nifi.wali.LengthDelimitedJournal.writeHeader(LengthDelimitedJournal.java:151)
at org.apache.nifi.wali.SequentialAccessWriteAheadLog.checkpoint(SequentialAccessWriteAheadLog.java:306)
at org.apache.nifi.wali.SequentialAccessWriteAheadLog.checkpoint(SequentialAccessWriteAheadLog.java:251)
at org.apache.nifi.controller.repository.WriteAheadFlowFileRepository.checkpoint(WriteAheadFlowFileRepository.java:735)
at org.apache.nifi.controller.repository.WriteAheadFlowFileRepository$1.run(WriteAheadFlowFileRepository.java:693)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Важной частью здесь является «Слишком много открытых файлов».
Чтобы получить текущие ограничения с использованием linux: ulimit -x -n
Комуполучить количество открытых файлов с помощью Linux: sudo ls /proc/$NIFI_PID/fd | wc -l
Я использую Docker, поэтому я увеличил лимит с помощью команды запуска Docker: docker run --ulimit nofile=1048576:1048576 ...
Другие решения будут: увеличитьограничения на хост-машине, определить, какие процессоры берутся за ручки и заново их обработать (не так просто).