簡體   English   中英

在kafka流應用程序中關閉或不關閉RocksDB Cache和WriteBufferManager

[英]To close or to not close RocksDB Cache and WriteBufferManager in kafka streams app

我目前正在通過擴展RocksDBConfigSetter接口在我的流應用程序中使用自定義RocksDB配置。 我看到有關關閉cachewriteBufferManager實例的文檔相互沖突。

現在,我看到 javadoc 和其中一個文檔頁面建議我們需要在重寫的RocksDBConfigSetter#close()方法中關閉所有擴展RocksObject的實例( CacheWriteBufferManager實例都擴展了此類)。

但是, memory 管理文檔頁面建議我們將這些實例創建為 static 實例,而不是在覆蓋的RocksDBConfigSetter#close()方法中關閉CacheWriteBufferManager實例。

不知道要在這里遵循什么。 如果有人可以幫助我了解哪些文檔是正確的,如果我們想通過傳入自定義的 RocksDB 配置來限制 memory 的使用,那么將不勝感激。

如果我們將它們聲明為 static,是否可以不關閉這些實例?

兩個文件都是正確的。

在您提到的第一個文檔中,緩存是 object 的一個字段。 如果你不關閉close()中的緩存,它會在 Kafka Streams 關閉相應的 RocksDB state 存儲后泄漏堆外 memory 直到 Z18B5A217C4DAD25662D3A05EDB0E39D7。

第二個文檔中,您提到緩存和寫緩沖區管理器是 static。 如果您在close()中關閉它們,則由 Kafka Streams 關閉的第一個 RocksDB state 存儲將同時關閉所有其他 RocksDB state 存儲很可能會崩潰,因為它們的緩存和寫入緩沖區管理器已關閉。

You would need to close a static cache and a static write buffer manager when the class is unloaded by the class loader for which we do not have a callback. I think unloading happens when the JVM exits, so no off-heap memory is leaked until the JVM exits and afterwards the off-heap memory is freed anyways.

關於您關於限制 RocksDB 的 memory 使用的問題,答案取決於您要限制的內容。 您想限制一個 RocksDB 實例使用的 memory,還是限制一個 Kafka Streams 客戶端中使用的所有 RocksDB 實例的 memory? 對於前者,您應該使用第一個文檔中的示例。 對於后者,您應該使用第二個文檔中的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM