我目前正在编写ElasticSearch Nifi处理器。对ES的单独插入/写入不是最佳的,而是首选批处理文档。什么被认为是Nifi处理器中跟踪(批量)文档(FlowFiles)的最佳方法,以及何时批量处理它们?我最关心的部分是ES是不可用的,关闭,网络分区等是否阻止批处理成功。问题的主要观点是,Nifi具有用于排队/反压等的内容存储,是否有一种首选方法可以确保在目的地停机时没有FlowFiles丢失?也许还有另一个处理器我应该看一个例子?
我已经看过Mongo处理器,Merge等,试图了解处理器内部批处理的首选方法,但似乎找不到具体的东西。任何建议将不胜感激。
很有可能我忽视了Nifi的一些基本功能。我仍然是该平台的新手。
谢谢!
答案 0 :(得分:2)
很棒的问题和非常常见的模式。这就是我们拥有ProcessSession概念的原因。它允许您向外部端点发送零个或多个内容,并且只有在您知道收件人已经确认后才会提交。从这个意义上讲,它至少提供一次语义。如果您正在使用的协议支持两阶段提交样式语义,那么您可以非常接近难以捉摸的完全一次语义。您在这里询问的大部分细节将取决于目标系统API和行为。
apache代码库中有一些示例可以揭示实现此目的的方法。一种方法是,如果您可以在推送到目标系统之前生成合并的事件集合。取决于其API。我认为PutMongo和PutSolr以这种方式运作(尽管那里的专家需要权衡)。可以在PutSQL中找到一个可能更像您正在寻找的示例,它可以在批量流文件上运行,以便在单个事务中(在目标数据库上)发送。
会密切留意这里,但可以通过users@nifi.apache.org了解更大的NiFi小组。
由于 乔