2017-05-15 26 views
3

有人可以詳細解釋當下一個處理器無法接收或處理任何數據時,像GetFile或QueryDatabaseTable這樣的NiFi處理器如何存儲行?數據會在內存中傳輸,然後在大小超過某個閾值時交換到磁盤?可能會有內存耗盡或數據丟失的風險?NiFi如何將流量數據存儲在內存或磁盤中

回答

5

我會建議你閱讀了Apache NiFi文件,明確了「阿帕奇NiFi在深度」,以瞭解數據是如何存儲,並通過NiFi:

https://nifi.apache.org/docs/nifi-docs/html/nifi-in-depth.html

簡短的回答是,數據總是寫在NiFi內部存儲庫的磁盤上。流文件具有持久化到流文件存儲庫的屬性和持久存儲到內容存儲庫的內容。除非處理器選擇將整個內容讀入內存以執行某些處理,否則內容不會保存在內存中。

當流文件在一個隊列中時,沒有任何內容被保存在內存中,只是流文件對象知道內容在磁盤上的位置。當隊列達到一定的大小時,這些流文件對象將被交換到磁盤上,這允許你有一個擁有數百萬流文件的隊列,而實際上沒有一百萬個流文件對象。

還有一個背壓的概念,用於根據流文件的數量或隊列中所有流文件的大小來控制隊列的最大大小。

相關問題