【问题标题】:Apache NiFi - Using multiple FlowFiles as input to a processorApache NiFi - 使用多个 FlowFiles 作为处理器的输入
【发布时间】:2017-02-09 22:21:03
【问题描述】:

我有一个工作流程,其中两个或多个输入已设置对它们执行的操作(联合、补码等)以产生单个输出。我希望自己必须编写一个处理器来执行设置逻辑,但是甚至可以使用不同来源的多个流文件并同时处理它们吗?

【问题讨论】:

  • 你能描述一个样本集操作在概念上是如何工作的(如果不是在 NiFi 中)?大多数使用多个源流文件的 NiFi 操作属于合并、排序或批量放置类型。
  • 最基本的操作类似于“匹配和合并”(交集)操作 - 获取流文件 A 和 B,并生成具有 A 和 B 共有元素的单个输出流文件。听起来像合并/排序一样接近我想要的,虽然 MergeContent 的文档似乎表明它只支持一个传入连接。

标签: apache-nifi


【解决方案1】:

NiFi 处理器可以对其输入队列中的所有流文件进行操作。例如:

@Override
public void onTrigger(final ProcessContext context, final ProcessSession session) {
    List<FlowFile> flowFiles = session.get(context.getProperty(BATCH_SIZE).asInteger());
    if (flowFiles == null || flowFiles.size() == 0) {
        return;
    }
    // process flowFiles
    ...

您可以使用漏斗组件将多个输入汇集到一个输入队列中,然后可以共享相同的背压和优先级设置。

【讨论】:

  • 这是有道理的,但是如果到达率非常不同(即输入 A 需要 1 分钟生成,输入 B 需要 10 分钟)怎么办。在收到输入 B 之前,是否可以将输入 A“暂停”?
  • 一些处理器使用属性将流文件标识为整体的片段。如果您知道您的数据将具有该模式,则可以跳过流文件,直到整个集合到达。
猜你喜欢
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多