【问题标题】:Size of the Kafka Streams In Memory Store内存存储中 Kafka 流的大小
【发布时间】:2018-10-23 20:10:28
【问题描述】:

我正在对 Kafka 主题流进行聚合并保存到内存状态存储中。我想知道内存中累积数据的确切大小,这个可以查到吗?

我查看了 jconsole 和 Confluent Control Center 上的 jmx 指标,但似乎没有任何相关信息,请问有什么我可以用来查找的吗?

【问题讨论】:

    标签: apache-kafka apache-kafka-streams


    【解决方案1】:

    您可以通过KeyValueStore#approximateNumEntries() 获取内存存储中存储的键值对的数量(对于默认的内存存储实现,这个数字实际上是准确的)。如果您可以估计每个键值对的字节大小,您就可以进行数学计算。

    然而,在 Java 中估计一个对象的字节大小通常是相当困难的。问题是,Java 没有提供任何方法来接收对象的实际大小。此外,对象可以嵌套,使其更加困难。最后,除了实际数据之外,每个对象总会有一些元数据开销,而这个开销是依赖于 JVM 实现的。

    【讨论】:

    • 谢谢 我想知道我是否必须这样做,您知道 Persisted Store 大小是否可访问并且与内存大小相当吗?
    • 我还注意到,在向流中发送大量 Tombstoned 消息时,方法approximateNumEntries() 有一段时间没有更新,例如计数返回100,000 但无法查询任何键,所以它们已正确删除。
    • 持久存储也是一样。默认使用 RocksDB 并且仅近似键/值对的数量...对于第二个问题:可能与缓存有关...如果未刷新缓存,则存储可能仍会报告旧值。您可以尝试禁用缓存吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2019-05-13
    • 2018-10-14
    • 1970-01-01
    • 2021-09-27
    • 2021-11-21
    • 2020-10-17
    相关资源
    最近更新 更多