nifi FlowFile 尚未关闭(Groovy 脚本)警告

Posted

技术标签:

【中文标题】nifi FlowFile 尚未关闭(Groovy 脚本)警告【英文标题】:nifi FlowFile has not been closed (Groovy script)warning 【发布时间】:2018-07-25 15:09:13 【问题描述】:

新的 nifi 术语和流文件处理。

找到了一种方便的方法来处理传入的 xml 并使用 XmlSlurper 对其进行解析,但是对于传入流文件的以下 GroovyScript 会收到警告-

流程:

处理器详细信息:

脚本正文:

def flowFile = session.get()
if(!flowFile) return
InputStream i = flowFile.read()
new XmlSlurper().parse(i)
i.close()
REL_SUCCESS << flowFile

似乎是处理流文件的问题。有人可以解释这里到底发生了什么以及如何最好地处理它吗?似乎这导致集群有时挂起

【问题讨论】:

【参考方案1】:

即使发生错误,也可以使用try-catchwithStream 关闭流:

def flowFile = session.get()
if(!flowFile) return
def xml = flowFile.read().withStreami->
    new XmlSlurper().parse(i)

REL_SUCCESS << flowFile

【讨论】:

它似乎完成了这项工作,但处理器仍然显示输入/输出计数器 1 并出现解析错误。这个想法是解析 xml,如果格式正确,则传递给成功,如果不传递给失败连接器,则在解析过程中抑制错误(如果有)。 funkyimg.com/i/2JN6z.jpg 更新:计数器只是流文件失败的当前流状态。它会显示一分钟,然后随着处理器上的错误一起消失。所以我们很好! :) 我想知道将这些解析错误重定向到日志文件的最简单方法是什么,也许是在 hdfs 上?这样我就可以回顾并跟踪失败的流文件发生了什么解析错误 如果您使用transfer to failure 失败策略,那么您的流程文件中将出现一个新参数:ERROR_MESSAGE,它将包含错误消息。这样您就可以将错误转移到您想要的地方。 对,存储到hdfs格式错误的xml后,使用error_message转换流文件内容,并将其存储在格式错误的文件附近,但带有一些后缀.error ReplaceText 可以用属性值替换整个流文件内容

以上是关于nifi FlowFile 尚未关闭(Groovy 脚本)警告的主要内容,如果未能解决你的问题,请参考以下文章

会话未在nifi自定义处理器内关闭异常

Nifi02 部署与入门

Nifi02 部署与入门

nifi生产环境使用

用Nifi 从web api 取数据到HDFS

Apache NiFi深度扩展