问题标签 [rocksdb-java]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
22 浏览

apache-kafka - Kafka Streams RocksDB 配置 - 使用 num.standby.replicas 了解内存分配

我正在使用 Kafka Streams 3.0.0。使用 Spring Cloud Stream。我正在尝试了解 RocksDB 缓存的内存配置,如本Confluent 文档中所述。

我有一个包含 20 个分区并num.standby.replicas设置为 1 的 Kafka 主题。我在本地运行同一个 Kafka Streams 应用程序的 3 个实例。为了验证 RocksDB 可以使用多少内存,我正在检查kafka_stream_state_block_cache_capacitySpring/actuator/prometheus端点的指标。

我的 Kafka Stream 应用程序使用 WindowStore。

我的 BoundedMemoryRocksDBConfig 是:

请注意,cacheandwriteBufferManager变量不是静态的。

其他相关的 Spring Cloud Stream 配置:

从这个StackOverflow 答案中可以看出,使用 WindowStore 的任务由 2 个段组成,每个段将创建一个 RocksDB 实例。

我期望的是每个分区都映射到一个任务。每个任务应该使用大约 200MB 的内存。此外,由于num.standby.replicas设置为 1,每个任务都会被复制。因此,总共应该有:

  • 40 个任务(因为 20 个分区和num.standby.replicas1 个)
  • 80 段(因为每个任务 2 段)
  • 80 个 RocksDB 实例(因为每个段 1 个 RocksDB 实例)

这意味着我应该期望 Kafka Streams 应用程序的每个实例负责 40/3 = 14 个任务。每个任务应该使用 200MB 即kafka_stream_state_block_cache_capacitymetric 是 200MB。

但是通过运行应用程序,我发现任务的数量是正确的,但是每个任务占用的内存,即kafka_stream_state_block_cache_capacity指标是 400MB 而不是 200MB。为什么会这样?