我面临一个非常奇怪的问题。
此错误在“ EvaluateJsonPath 1.6.0”处理器中随机出现。我的工作流程中有3个此处理器实例。错误是随机出现的,它不在同一位置。
有时流量运行良好(非常少)。该错误足够频繁,但是错误的位置是随机的。
流程就像这样=>触发http url->评估结果json->获取更多URL->调用这些http url->执行eval->等待->合并所有结果->写入fs-> end < / p>
等待部分代码等待大约30分钟。
每个关系都有足够的缓冲区(5 gb,100000 ff)。我看不到背压。
系统有足够的剩余内存。而且jvm正在使用28gb堆运行。
我在1.6.0版上
可能是什么原因?是一些后台进程,在进程释放文件之前清理文件?
有可能,我可能已经配置了一些优化措施,迫使nifi清理内容文件夹吗? 它不是,内容文件夹是空的,里面仍然有旧文件,所以不能那样。
我真的很困惑。
我可以看到以下堆栈跟踪
`
2018-11-14 12:04:04,120 ERROR [Timer-Driven Process Thread-2] o.a.n.p.standard.EvaluateJsonPath EvaluateJsonPath[id=d9d338ca-5396-3f8c-e134-753aacda1ca6] EvaluateJsonPath[id=d9d338ca-5396-3f8c-e134-753aacda1ca6] failed to process session due to org.apache.nifi.processor.exception.MissingFlowFileException: Unable to find content for FlowFile; Processor Administratively Yielded for 1 sec: org.apache.nifi.processor.exception.MissingFlowFileException: Unable to find content for FlowFile
org.apache.nifi.processor.exception.MissingFlowFileException: Unable to find content for FlowFile
at org.apache.nifi.controller.repository.StandardProcessSession.handleContentNotFound(StandardProcessSession.java:3104)
at org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2228)
at org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2175)
at org.apache.nifi.processors.standard.AbstractJsonPathProcessor.validateAndEstablishJsonContext(AbstractJsonPathProcessor.java:77)
at org.apache.nifi.processors.standard.EvaluateJsonPath.onTrigger(EvaluateJsonPath.java:271)
at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1147)
at org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:175)
at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:117)
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)
Caused by: org.apache.nifi.controller.repository.ContentNotFoundException: Could not find content for StandardContentClaim [resourceClaim=StandardResourceClaim[id=1542197040430-4449, container=default, section=353], offset=844526, length=142607]
at org.apache.nifi.controller.repository.StandardProcessSession.getInputStream(StandardProcessSession.java:2167)
at org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2192)
... 14 common frames omitted
Caused by: java.io.EOFException: null
at org.apache.nifi.stream.io.StreamUtils.skip(StreamUtils.java:242)
at org.apache.nifi.controller.repository.FileSystemRepository.read(FileSystemRepository.java:859)
at org.apache.nifi.controller.repository.StandardProcessSession.getInputStream(StandardProcessSession.java:2135)
... 15 common frames omitted
`
答案 0 :(得分:0)
稍作搜索后,看来可能存在两种可能导致此类错误的问题。
这种问题应该是可重现的,因此,如果消息在管道中一次失败,则在重新运行它时应该再次失败。这些问题应该很容易解决。
需要注意的是错误的消息内容,甚至是空消息。
当Nifi接收到一条消息时,它将被放置到内容存储库中,直到需要再次触摸为止。第二种可能性是存储库有问题。
可能的原因是对存储库的外部干扰(其他方式是写/删除/锁定内容)。也许是操作系统级别的问题。感谢HCC的这篇文章,我找到了这个角度:https://community.hortonworks.com/questions/231364/nifi-processing-files-as-zero-bytes.html
我无法帮助您进行深入研究,但是如果您安排了Cloudera(Nifi的推动力)的支持,则支持团队应能够在需要时进行进一步调查。
全面披露:我是Cloudera的雇员
答案 1 :(得分:0)
我们在集群中遇到了类似的问题。 您找到解决方法了吗? 我打开了一个类似的线程 Missing flowfile exception on Nifi processing cause loss of information