问题标签 [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.
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_capacity
Spring/actuator/prometheus
端点的指标。
我的 Kafka Stream 应用程序使用 WindowStore。
我的 BoundedMemoryRocksDBConfig 是:
请注意,cache
andwriteBufferManager
变量不是静态的。
其他相关的 Spring Cloud Stream 配置:
从这个StackOverflow 答案中可以看出,使用 WindowStore 的任务由 2 个段组成,每个段将创建一个 RocksDB 实例。
我期望的是每个分区都映射到一个任务。每个任务应该使用大约 200MB 的内存。此外,由于num.standby.replicas
设置为 1,每个任务都会被复制。因此,总共应该有:
- 40 个任务(因为 20 个分区和
num.standby.replicas
1 个) - 80 段(因为每个任务 2 段)
- 80 个 RocksDB 实例(因为每个段 1 个 RocksDB 实例)
这意味着我应该期望 Kafka Streams 应用程序的每个实例负责 40/3 = 14 个任务。每个任务应该使用 200MB 即kafka_stream_state_block_cache_capacity
metric 是 200MB。
但是通过运行应用程序,我发现任务的数量是正确的,但是每个任务占用的内存,即kafka_stream_state_block_cache_capacity
指标是 400MB 而不是 200MB。为什么会这样?