小编iah*_*h10的帖子

如果 RocksDB 缓存在内存中,为什么要在 Kafka Streams Processor API 中启用记录缓存?

我试图了解 Kafka 流处理器 API 中的 RocksDB 行为。我正在使用 KStreams 提供的默认 RocksDB 配置一个持久的 StateStore。

StoreBuilder countStoreBuilder =
  Stores.keyValueStoreBuilder(
    Stores.persistentKeyValueStore("Counts"),
    Serdes.String(),
    Serdes.Long())
Run Code Online (Sandbox Code Playgroud)

我没有做任何聚合、连接或窗口化。我只是接收记录并将其中一些与商店中以前的物品进行比较,并将我收到的一些记录存储在州商店中。

开发人员指南提到您可以通过调用.withCachingEnabled()上述构建器在处理器 API 中启用记录缓存。

缓存“用作读取缓存以加快从状态存储中读取数据的速度” - Record Caches Kafka Streams

然而,我的理解是持久模式下的 RocksDB 首先缓冲在内存中,只有当状态不适合 RAM 时才会扩展到磁盘。

RocksDB 仅用作内部查找表(如果状态不适合内存,则可以刷新到磁盘。RocksDB 刷新仅是因为状态可能大于可用的主内存。Kafka Streams 内部数据管理

那么,如果记录缓存都缓存在内存中,那么记录缓存如何加快从状态存储中读取的速度呢?在我看来,记录缓存与 RocksDB 行为重叠。

apache-kafka rocksdb apache-kafka-streams

5
推荐指数
1
解决办法
828
查看次数