apache-nifi - 流文件卡在队列中(Apache NiFi)
问题描述
我有以下流程:
ListFTP -> RouteOnAttribute -> FetchFTP -> UnpackContent -> ExecuteScript
.
一些文件卡在队列中UnpackContent -> ExecuteScript
。
ExecuteScript
吃了一些流文件,它们就消失了:failure
关系success
是空的。它只是显示了一些Tasks/Time
现场活动。他们之前都排在队列中ExecuteScript
。我试图清空队列,但并非所有流文件都已从此队列中删除。其中大约 1/3 仍然排在队列中。我试图再次禁用所有处理器并清空队列,但它返回:0 FlowFiles (0 bytes) were removed from the queue.
当我尝试更改连接目标时,它返回:
Cannot change destination of Connection because FlowFiles from this Connection are currently held by 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
我将并发任务设置为 50,然后ExecuteScript
再次运行并终止它。我收到了这个错误:
更新 v3
我用相同的脚本创建了额外的 ExecuteScript 处理器,它工作正常。但是在我停止这个新处理器并创建新的流文件之后,这个处理器现在有同样的问题:它只是卡住了。
好笑。是ExecuteScript
一次性使用吗?
解决方案
您需要修改 nifi-1.13.2 中的代码,因为 NIFI-8080 导致了这些错误。或者你只使用 nifi 1.12.1
JythonScriptEngineConfigurator:
@Override
public Object init(ScriptEngine engine, String scriptBody, String[] modulePaths) throws ScriptException {
// Always compile when first run
if (engine != null) {
// Add prefix for import sys and all jython modules
prefix = "import sys\n"
+ Arrays.stream(modulePaths).map((modulePath) -> "sys.path.append(" + PyString.encode_UnicodeEscape(modulePath, true) + ")")
.collect(Collectors.joining("\n"));
}
return null;
}
@Override
public Object eval(ScriptEngine engine, String scriptBody, String[] modulePaths) throws ScriptException {
Object returnValue = null;
if (engine != null) {
returnValue = ((Compilable) engine).compile(prefix + scriptBody).eval();
}
return returnValue;
}
推荐阅读
- java - 检查流的任何元素是否不存在
- django - 我想在 django 3 的网站模板 url 链接中显示主题标题
- sql - Symfony 4 中的 SQL 查询卡住了
- encryption - Casear Cipher 蛮力攻击 - 每一个可能的密钥
- python - BytesIO Python 的克罗地亚语编码
- java - Java GUI GridBagLayout 如何在一列中放置三个组合框?
- c# - 我可以在字典中存储类型或类型名称并在 C# 的泛型方法中使用它吗?
- jestjs - 如何用玩笑测试 objection.js?
- authentication - keycloak登录后无法重定向回应用程序页面
- javascript - Angular 6 'app-action-button' 不是已知元素