Apache nifi 流文件卡在队列中(Apache NiFi)
我有以下的流程:Apache nifi 流文件卡在队列中(Apache NiFi),apache-nifi,Apache Nifi,我有以下的流程: ListFTP->RouteOnAttribute->FetchFTP->unpacontent->ExecuteScript 一些文件卡在队列UnpackContent->ExecuteScript中 ExecuteScript吃了一些流文件,它们就消失了:failure和success关系为空。它只是显示了任务/时间字段中的一些活动。他们都在ExecuteScript前面排队。我试图清空队列,但并不是所有的流文件都已从此队列中删除。大约三分之一的人仍在排队。我试图禁用所有处
ListFTP->RouteOnAttribute->FetchFTP->unpacontent->ExecuteScript
一些文件卡在队列UnpackContent->ExecuteScript
中
ExecuteScript
吃了一些流文件,它们就消失了:failure
和success
关系为空。它只是显示了任务/时间
字段中的一些活动。他们都在ExecuteScript
前面排队。我试图清空队列,但并不是所有的流文件都已从此队列中删除。大约三分之一的人仍在排队。我试图禁用所有处理器并再次清空队列,但它返回:0个流文件(0字节)已从队列中删除。
当我尝试更改连接目标时,它返回:
无法更改连接的目标,因为来自此连接的流文件当前由ExecuteScript[id=d33c9b73-0177-1000-5151-83b7b938de39]持有。
ExecuScript
(使用Python)
所以,我不能清空队列,因为它总是返回消息说并没有任何流文件,并且我不能删除连接。这已经持续了好几个小时了
连接配置:
调度设置为0秒,对流文件等没有惩罚
是脚本问题吗
更新
将脚本更改为:
flowFile = session.get()
if (flowFile != None):
# All processing code starts at this indent
if errorOccurred:
session.transfer(flowFile, REL_FAILURE)
else:
session.transfer(flowFile, REL_SUCCESS)
# implicit return at the end
同样的结果
更新v2
我将concurent tasks设置为50,然后再次运行ExecuteScript
,并终止它。我得到了这个错误:
更新v3
我用同样的脚本创建了额外的ExecuteScript处理器,它工作得很好。但在我停止这个新处理器并创建新的流文件之后,这个处理器现在也有同样的问题:它只是卡住了
好笑。
ExecuteScript
是否一次性使用?您需要修改nifi-1.13.2中的代码,因为nifi-8080导致了这些错误。或者只使用nifi 1.12.1
JythonScript引擎配置程序:
@覆盖
公共对象初始化(ScriptEngine引擎、字符串scriptBody、字符串[]ModulePath)引发ScriptException{
//总是在第一次运行时编译
如果(引擎!=null){
//为导入sys和所有jython模块添加前缀
prefix=“导入系统\n”
+Arrays.stream(modulePath).map((modulePath)->“sys.path.append(“+PyString.encode_unicodeScape(modulePath,true)+”)
.collect(收集器.加入(“\n”));
}
返回null;
}
@凌驾
公共对象评估(ScriptEngine引擎、字符串scriptBody、字符串[]ModulePath)引发ScriptException{
对象返回值=null;
如果(引擎!=null){
returnValue=((可编译)引擎).compile(前缀+脚本体).eval();
}
返回值;
}
听起来你的脚本还在处理文件,我想是出了问题。因为它已经处理了8个小时的文件。我用相同的脚本创建了额外的ExecuteScript
处理器,它工作得很好。我真的不知道其他ExecuteScript
处理器发生了什么。如何删除这些流文件。。。我甚至无法终止它,因为处理器中有0个流文件。您是否尝试过重启nifi这样明显的事情?我现在无法重启它,只能在晚上重启,因为我们有许多(现在)正在工作的其他处理器。