有人可以详细解释当下一个处理器无法接收或处理任何数据时,像GetFile或QueryDatabaseTable这样的NiFi处理器如何存储行?数据是否会在内存中传输,然后在大小超过某个阈值时交换到磁盘?它可能会有内存不足或丢失数据的风险吗?
答案 0 :(得分:5)
我建议阅读Apache NiFi文档,特别是“Apache NiFi in Depth”文档,以了解数据如何通过NiFi存储和传递:
https://nifi.apache.org/docs/nifi-docs/html/nifi-in-depth.html
简短的回答是,数据总是写在NiFi的内部存储库中的磁盘上。流文件具有持久保存到流文件存储库的属性以及持久保存到内容存储库的内容。除非处理器选择将整个内容读入存储器以执行某些处理,否则内容不会保留在存储器中。
当流文件在队列中时,内容中没有任何内容,只有流文件对象知道内容在磁盘上的位置。当队列达到一定大小时,这些流文件对象将被交换到磁盘,这允许您拥有包含数百万个流文件的队列,而实际上没有一百万个流文件对象。
还有一个背压的概念,可以根据流文件的数量或队列中所有流文件的大小来控制队列的最大大小。