【问题标题】:When to session.commit() in a NiFi Processor何时在 NiFi 处理器中使用 session.commit()
【发布时间】:2016-09-12 23:07:04
【问题描述】:

我正在实现一个 NiFi 处理器,并且对最佳实践有几点需要说明:

  1. session.getProvenanceReporter().modify(...) - 我们是否应该在每次 session.transfer() 之后立即发出事件
  2. session.commit() - 文档说,在对流文件执行操作后,可以调用提交或回滚。

开发者指南:https://nifi.apache.org/docs/nifi-docs/html/developer-guide.html#process_session

问题是,如果不显式调用这些方法,我会失去什么?

【问题讨论】:

    标签: apache-nifi


    【解决方案1】:

    1) 是的,通常在传输流文件后会发出出处事件。

    2) 这取决于您是扩展 AbstractProcessor 还是 AbstractSessionFactoryProcessor。 AbstractProcessor 将为您调用提交或回滚,因此您不需要,AbstractSessionFactoryProcessor 要求您适当地调用它们。

    如果您正在扩展 AbstractSessionFactoryProcessor 并且从不调用 commit,最终该会话将被垃圾收集并调用回滚,并且该会话执行的所有操作都将被回滚。

    还有一个注解@SupportsBatching 可以放在处理器上。当此注释出现时,UI 会在处理器的调度选项卡上显示一个滑块,指示可以在幕后将多少毫秒的框架操作(如 commit())一起批处理以提高吞吐量。如果延迟更重要,那么将幻灯片保持在 0 毫秒是合适的,但这里的关键是用户在构建流程和配置处理器时可以决定这一点。

    【讨论】:

      猜你喜欢
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多