为什么Nifi丢失了流文件内容?

时间:2018-11-14 16:50:21

标签: apache-nifi

我面临一个非常奇怪的问题。

此错误在“ 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

`

2 个答案:

答案 0 :(得分:0)

稍作搜索后,看来可能存在两种可能导致此类错误的问题。

  1. 有关邮件内容的问题

这种问题应该是可重现的,因此,如果消息在管道中一次失败,则在重新运行它时应该再次失败。这些问题应该很容易解决。

需要注意的是错误的消息内容,甚至是空消息。

  1. 内容存储库问题

当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