Memory K表/K流内存随时间的消耗

Memory K表/K流内存随时间的消耗,memory,apache-kafka,apache-kafka-streams,confluent-platform,Memory,Apache Kafka,Apache Kafka Streams,Confluent Platform,有没有一种方法可以计算java/scala应用程序中KTable/KStream随着时间的推移大约会使用多少堆(或任何其他)内存 我有一些具体的假设,我想知道它们是否正确: 卡夫卡流仅使用内部主题和RocksDB RocksDB是可嵌入的DB,所以它使用我的应用程序的堆内存 KStream不断地从RocksDB中删除所有记录,直到拓扑中的任何处理器不再使用这些记录(例如,对于使用指定JoinWindow的连接)(==占用的内存不多) KTable完全存储在RocksDB(=内存中) 当KTab

有没有一种方法可以计算java/scala应用程序中KTable/KStream随着时间的推移大约会使用多少堆(或任何其他)内存

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

  • 卡夫卡流仅使用内部主题和RocksDB

  • RocksDB是可嵌入的DB,所以它使用我的应用程序的堆内存

  • KStream不断地从RocksDB中删除所有记录,直到拓扑中的任何处理器不再使用这些记录(例如,对于使用指定JoinWindow的连接)(==占用的内存不多)

  • KTable完全存储在RocksDB(=内存中)

  • 当KTable接收空值记录时,它从RocksDB中删除记录(=内存已释放)


  • 很难估计。对于一般尺寸,考虑这个指南:

    卡夫卡流仅使用内部主题和RocksDB

    对。您还可以使用内存存储(卡夫卡流的一部分)替换RocksDB,或者实现自己的自定义存储

    RocksDB是可嵌入的DB,所以它使用我的应用程序的堆内存

    RocksDB使用堆外内存,并溢出到磁盘

    KStream不断地从RocksDB中删除所有记录,直到拓扑中的任何处理器不再使用这些记录(例如,对于使用指定JoinWindow的连接)(==占用的内存不多)

    这取决于商店类型。对于键值存储(即,“常规”
    KTable
    s)数据不会被删除(显式删除消息除外,因此调用逻辑删除)。对于时间窗口/会话窗口KTables(窗口聚合的结果)和联接,有一个保留期,在此期间之后数据将被删除

    KTable完全存储在RocksDB(=内存中)

    RocksDB也会溢出磁盘。它不仅仅在记忆中

    当KTable接收空键记录时,它从RocksDB中删除记录(=内存已释放)


    null
    -密钥记录的格式没有错误。我想你的意思是
    null
    -值记录,即所谓的墓碑。这些将被视为删除。

    谢谢!是的,我指的是空值记录。