Java 创建新的流文件或重用旧的流文件
我正在编写一个自定义处理器,在其中转换流文件的内容。为了简单起见,这个问题应该只写相同的内容Java 创建新的流文件或重用旧的流文件,java,apache-nifi,Java,Apache Nifi,我正在编写一个自定义处理器,在其中转换流文件的内容。为了简单起见,这个问题应该只写相同的内容 public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException { FlowFile flowFile = session.get(); if (flowFile == null) return; session.write( flowFil
public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
FlowFile flowFile = session.get();
if (flowFile == null) return;
session.write(
flowFile,
(input, output) -> input.transferTo(output) // Do transfomration here
);
session.transfer(REL_SUCCESS, flowFile);
}
如果我是对的,我在那里做的就是用内容的标识替换原始流文件的内容
public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
FlowFile flowFile = session.get();
if (flowFile == null) return;
session.write(
flowFile,
(input, output) -> input.transferTo(output) // Do transfomration here
);
session.transfer(REL_SUCCESS, flowFile);
}
现在有了这个方法
session.create(flowFile);
这将创建一个新的流文件
这让我思考,是否我做的都是错的,写在原始的流程文件中。这样做很简单,所以感觉还可以。但也许创建一个新的流程文件会更好?这两种方法的含义是什么?什么时候选择一种或另一种是正确的?或者可观察到的行为是否相同? 这将是一些代码,它创建一个新的流文件,写入原始流文件的内容:
public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
FlowFile flowFile = session.get();
if (flowFile == null) return;
FlowFile newFile = session.create(flowFile);
session.write(
newFile,
output) -> session.read(flowFile).transferTo(output) // Do transfomration here
);
session.transfer(REL_SUCCESS, newFile);
}
这取决于您的需求,但一般来说,您应该在原始流程文件中编写 如果您使用
session.create()
创建一个新的流文件,一个新的UUID将与您的流文件相关联,这将使您的数据源毫无意义地混乱不堪
当:-您希望同时保留原始和新的flowfile
-从外部来源读取(卡夫卡、hdfs、FS…)
-1输入N输出(例如splitRecords处理器)这取决于您的需求,但通常您应该在原始流程文件中写入 如果您使用
session.create()
创建一个新的流文件,一个新的UUID将与您的流文件相关联,这将使您的数据源毫无意义地混乱不堪
当:-您希望同时保留原始和新的flowfile
-从外部来源读取(卡夫卡、hdfs、FS…)
-1输入N输出(例如splitRecords处理器)
- -针对与给定流文件对应的内容执行给定回调。
- 当您不需要原始内容时非常有用
- -在存储库中创建一个新的流文件,该文件没有任何内容,也没有与父流文件的链接。
- 仅当从外部系统接收或创建数据时,此方法才适用
- -在存储库中创建一个新的流文件,该文件不包含任何内容,但具有到parentFlowFile的父链接。新创建的流文件将继承除UUID之外的所有父级属性。
- 要同时输出原始流文件和新流文件时使用
- 或者您希望从输入创建多个流文件
- -针对与给定流文件对应的内容执行给定回调。
- 当您不需要原始内容时非常有用
- -在存储库中创建一个新的流文件,该文件没有任何内容,也没有与父流文件的链接。
- 仅当从外部系统接收或创建数据时,此方法才适用
- -在存储库中创建一个新的流文件,该文件不包含任何内容,但具有到parentFlowFile的父链接。新创建的流文件将继承除UUID之外的所有父级属性。
- 要同时输出原始流文件和新流文件时使用
- 或者您希望从输入创建多个流文件