Apache nifi 自定义等待处理器创建过多日志

Apache nifi 自定义等待处理器创建过多日志,apache-nifi,Apache Nifi,我已经创建了一个自定义日志处理器。我用“惩罚持续时间”来等待 下面是我实现这一点的代码。处理器按预期工作。但当它运行时,我可以看到生成了大量日志。我可以看到日志一直在打印“流文件为空(错误)!!!”。简单的解决方案是注释掉日志,但处理器仍然被调用了很多次。我一直认为,如果我增加产量值,处理器就会在这么长的时间间隔内被调用 所以我的问题是,如何减少CPU压力,减少调用onTrigger方法的时间 @Override public void onTrigger(final ProcessContex

我已经创建了一个自定义日志处理器。我用“惩罚持续时间”来等待

下面是我实现这一点的代码。处理器按预期工作。但当它运行时,我可以看到生成了大量日志。我可以看到日志一直在打印“流文件为空(错误)!!!”。简单的解决方案是注释掉日志,但处理器仍然被调用了很多次。我一直认为,如果我增加产量值,处理器就会在这么长的时间间隔内被调用

所以我的问题是,如何减少CPU压力,减少调用onTrigger方法的时间

@Override
public void onTrigger(final ProcessContext context, final ProcessSession session) throws ProcessException {
    final ComponentLog logger = getLogger();
    FlowFile flowFile = session.get();
    if (flowFile != null) {
        logger.info("flow file is not null.");
        String state = flowFile.getAttribute("_wait_state");
        if (state == null || state.isEmpty()) {
            logger.info("\"_wait_state\" attribute is missing, going into WAIT.");
            flowFile = session.putAttribute( flowFile, "_wait_state", "1");
            flowFile = session.penalize(flowFile);
            context.yield();//to save CPU cycles....
            session.transfer( flowFile, POINT_TO_SELF_RELATIONSHIP );
        } else {
            logger.info("\"_wait_state\" attribute is available, breaking WAIT.");
            flowFile = session.removeAttribute( flowFile, "_wait_state" );
            session.transfer( flowFile, SUCCESS_RELATIONSHIP); 
        }
    } else {
        logger.info("flow file is null (bad)!!!.");
    }
}

处理器获取空流文件是很正常的,可能有两个原因

1) 处理器配置了多个并发任务,并且框架检测到传入队列中存在流文件,因此安排处理器运行,然后其中一个任务获取流文件,另一个任务执行,并且没有流文件

2) 处理器具有@TriggerWhenEmpty注释,该注释重写上述行为并始终执行处理器,而不管流文件是否在队列中

大多数处理器在启动OnTigger时都会执行以下操作:

FlowFile flowFile = session.get();
if (flowFile == null) {
  return;
}

处理器获取空流文件是很正常的,可能有两个原因

1) 处理器配置了多个并发任务,并且框架检测到传入队列中存在流文件,因此安排处理器运行,然后其中一个任务获取流文件,另一个任务执行,并且没有流文件

2) 处理器具有@TriggerWhenEmpty注释,该注释重写上述行为并始终执行处理器,而不管流文件是否在队列中

大多数处理器在启动OnTigger时都会执行以下操作:

FlowFile flowFile = session.get();
if (flowFile == null) {
  return;
}

null
流文件正常-因此只需删除此日志即可。要管理数字/时间触发,请使用调度处理器参数。
null
flow文件正常-因此只需删除此日志即可。要管理触发次数/时间,请使用调度处理器参数。听起来像计划。听起来像计划。