Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy 访问NiFi流文件的沿袭_Groovy_Apache Nifi_Nifi Api - Fatal编程技术网

Groovy 访问NiFi流文件的沿袭

Groovy 访问NiFi流文件的沿袭,groovy,apache-nifi,nifi-api,Groovy,Apache Nifi,Nifi Api,我正在为NiFi的流文件开发某种错误处理,例如,数据库子系统拒绝从流文件写入数据,因为数据不符合预期,因为该数据的源系统缺少一些主数据。 因此,此错误处理将数据写入MongoDB,并提供更多错误信息。 其中一个“更多信息”是这个流文件的某种堆栈跟踪,这意味着数据沿袭。为此,我编写了一个带有Groovy脚本的InvokeScriptedProcessor来实现这一点 以下是脚本的重要部分: ArrayList getStacktrace(flowfileUuid){ def lineage

我正在为NiFi的流文件开发某种错误处理,例如,数据库子系统拒绝从流文件写入数据,因为数据不符合预期,因为该数据的源系统缺少一些主数据。
因此,此错误处理将数据写入MongoDB,并提供更多错误信息。
其中一个“更多信息”是这个流文件的某种堆栈跟踪,这意味着数据沿袭。为此,我编写了一个带有Groovy脚本的InvokeScriptedProcessor来实现这一点

以下是脚本的重要部分:

ArrayList getStacktrace(flowfileUuid){
    def lineage = this.provenanceRepository.createLineageQuery(flowfileUuid)
    def lineageData = this.provenanceRepository.getLineageData(lineage.id)

    if (lineageData.results == null || lineageData.results.nodes.size() == 0){
        println "cannot find stacktrace for ${flowfileUuid}."
        return []
    }
    def eventIds = lineageData.results.nodes.findAll {n -> n.type == 'EVENT'}.collect {n -> n.id }.sort()
    def provenanceEvents = []
    for (eventId in eventIds){
        provenanceEvents << this.provenanceRepository.getProvenanceEvent(eventId).provenanceEvent.componentName
    }
    this.provenanceRepository.deleteLineageQuery(lineage.id)
    return provenanceEvents
}
ArrayList getStacktrace(flowfileUuid){
def沿袭=this.provenanceRepository.Create沿袭查询(flowfileUuid)
def LEGANEDATA=this.provenanceRepository.getLineage数据(relege.id)
if(linecadata.results==null | | linecadata.results.nodes.size()==0){
println“找不到${flowfileUuid}的stacktrace。”
返回[]
}
def eventIds=delegediata.results.nodes.findAll{n->n.type=='EVENT'}.collect{n->n.id}.sort()
def provenanceEvents=[]
for(eventId中的eventId){

provenanceEvents我不完全确定问题出在哪里,但一般来说,provence数据并不真正意味着要从处理器访问,这就是为什么会话或上下文没有提供API来检索provence事件,只允许创建事件

为了运行来源查询,需要对事件进行索引,并且不能保证索引将在何时进行,这与处理流文件的时间有关。因此,事件可能还不可见


ReportingTask是访问源事件的理想方式,可用于将它们从NiFi推送到某个外部系统进行长期存储。

实际上,我只使用NiFi api,因此这只是一个普通的api调用;我还尝试了InvokeHTTP处理器的相同功能。您有ReportingTask的示例吗?可能没有他为我的问题提供了正确的解决方案,因为我并不总是需要这些信息,只有当流文件运行到故障队列时才需要。是的,但如果我理解正确,您就在一个处理器(InvokeScriptedProcessor)中然后调用NiFi REST API,此时还不能保证起源事件已经被索引