什么时候在NiFi处理器中session.commit()

时间:2016-09-12 08:42:46

标签: apache-nifi

我正在实施一个NiFi处理器,并就最佳实践做了几点澄清:

  1. session.getProvenanceReporter()。modify(...) - 我们是否应该在每次session.transfer()之后立即发出事件。
  2. session.commit() - 文档说,在对流文件执行操作后,可以调用提交或回滚。
  3. 开发者指南:https://nifi.apache.org/docs/nifi-docs/html/developer-guide.html#process_session

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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