Nifi处理器批量插入 - 处理失败

时间:2015-11-25 16:40:44

标签: java-8 apache-nifi

我目前正在编写ElasticSearch Nifi处理器。对ES的单独插入/写入不是最佳的,而是首选批处理文档。什么被认为是Nifi处理器中跟踪(批量)文档(FlowFiles)的最佳方法,以及何时批量处理它们?我最关心的部分是ES是不可用的,关闭,网络分区等是否阻止批处理成功。问题的主要观点是,Nifi具有用于排队/反压等的内容存储,是否有一种首选方法可以确保在目的地停机时没有FlowFiles丢失?也许还有另一个处理器我应该看一个例子?

我已经看过Mongo处理器,Merge等,试图了解处理器内部批处理的首选方法,但似乎找不到具体的东西。任何建议将不胜感激。

很有可能我忽视了Nifi的一些基本功能。我仍然是该平台的新手。

谢谢!

1 个答案:

答案 0 :(得分:2)

很棒的问题和非常常见的模式。这就是我们拥有ProcessSession概念的原因。它允许您向外部端点发送零个或多个内容,并且只有在您知道收件人已经确认后才会提交。从这个意义上讲,它至少提供一次语义。如果您正在使用的协议支持两阶段提交样式语义,那么您可以非常接近难以捉摸的完全一次语义。您在这里询问的大部分细节将取决于目标系统API和行为。

apache代码库中有一些示例可以揭示实现此目的的方法。一种方法是,如果您可以在推送到目标系统之前生成合并的事件集合。取决于其API。我认为PutMongo和PutSolr以这种方式运作(尽管那里的专家需要权衡)。可以在PutSQL中找到一个可能更像您正在寻找的示例,它可以在批量流文件上运行,以便在单个事务中(在目标数据库上)发送。

https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSQL.java

会密切留意这里,但可以通过users@nifi.apache.org了解更大​​的NiFi小组。

由于 乔