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之外的所有父级属性。
        • 要同时输出原始流文件和新流文件时使用
        • 或者您希望从输入创建多个流文件

      谢谢!这提供了有用的信息。这是一个艰难的决定,接受哪个答案。谢谢!这提供了有用的信息。这是一个难以接受的决定。