KTable/KStream 随着时间的推移内存消耗

KTable/KStream memory consumption over time

有没有办法计算 KTable/KStream 在 java/scala 应用程序中随时间大约使用多少堆(或任何其他)内存?

我有一些具体的假设,我想知道它们是否正确:

很难估计。对于一般尺码,请参考本指南:https://docs.confluent.io/current/streams/sizing.html

Kafka streams use internal topics and RocksDB only.

是的。您还可以将 RocksDB 替换为 in-memory 存储(属于 Kafka Streams 的一部分)或实现您自己的自定义存储。

RocksDB is embeddable DB, so it uses heap memory of my application.

RocksDB 使用 off-heap 内存并溢出到磁盘。

KStream constantly deletes all records from RocksDB after they can no longer be used by any of processors in topology (e.g for join with specified JoinWindow) (== not so much memory used)

这取决于商店类型。对于 key-value 存储(即 "regular" KTables)数据不会被删除(显式删除消息除外,so-call 墓碑)。对于 time-windowed/session-windowed KTables(windowed-aggregations 的结果)和连接,有一个保留期,之后数据将被删除。

KTable is fully stored in RocksDB (== in memory)

RocksDB 也会溢出磁盘。不只是 in-memory。

When KTable receive null-key record it deletes record from RocksDB (== memory freed up)

null-关键记录没有格式错误。我假设你的意思是 null 值记录,so-called 墓碑。这些被视为删除。