当NiFi节点发生故障时的错误处理

当NiFi节点出现故障时的错误处理有两种模式。
1)来自外部的数据进入NiFi,例如Listen***系列。
2)NiFi内部的数据在处理器之间流动。

以下是两种模式的详细信息。

选项:数据从外部进入NiFi。

比如Listen***系。
我将Listen系的处理统一在NiFi的网络监听处理器机制中。
要说的是,如果NiFi的Listen系处理无法跟得上,数据就会溢出。
为了防止这种情况发生,需要进行NiFi的调优或者进行硬件扩展。

参考资料:
* Apache NIFI中的至少一次传递与仅一次传递语义

    • NiFi/MiNiFi間のS2Sプロトコルでデータ伝送するなら、at least onceは問題無い。

 

    • 更に、S2Sポートの後ろにDetectDuplicateを正しく使えば、Exactly onceも可能。

 

    • それ以外のプロトコル、2-phase commitが対応出来るなら(例えばKafka)least onceは保証出来る

 

    ** support 2-phase commit未対応のプロトコル、例えばSyslog protocolなら、NiFiではleast onceの保証は出来ない、あくまでもat most onceレベル。

选项1:
模式2: NiFi内部数据在处理器之间流动

每个NiFi处理器都有一个事务。

GitHub网址:https://github.com/apache/nifi/blob/master/nifi-api/src/main/java/org/apache/nifi/processor/AbstractProcessor.java

public final void onTrigger(final ProcessContext context, final ProcessSessionFactory sessionFactory) throws ProcessException {
        final ProcessSession session = sessionFactory.createSession();
        try {
            onTrigger(context, session);
            session.commit();
        } catch (final Throwable t) {
            session.rollback(true);
            throw t;
        }
}
    • Session is started

 

    • Flow file is obtained

 

    • Operations performed

 

    • Flow file is transferred or removed

 

    Session is committed

如果从处理器A向处理器B传输数据时,处理器B(例如PutHDFS或PutFile)在处理过程中崩溃,
则不会进行提交。
重新启动后,会再次执行上次的操作,因此数据不会丢失。

广告
将在 10 秒后关闭
bannerAds