gpt4 book ai didi

apache-kafka - 如果 RocksDB 缓存在内存中,为什么要在 Kafka Streams Processor API 中启用记录缓存?

转载 作者:行者123 更新时间:2023-12-03 21:01:42 28 4
gpt4 key购买 nike

我试图了解 Kafka 流处理器 API 中的 RocksDB 行为。我正在使用 KStreams 提供的默认 RocksDB 配置一个持久的 StateStore。

StoreBuilder countStoreBuilder =
Stores.keyValueStoreBuilder(
Stores.persistentKeyValueStore("Counts"),
Serdes.String(),
Serdes.Long())

我没有做任何聚合、连接或窗口化。我只是接收记录并将其中一些与商店中以前的元素进行比较,并将我收到的一些记录存储在州商店中。

开发人员指南提到您可以通过调用 .withCachingEnabled() 在处理器 API 中启用记录缓存。在上面的构建器上。

The cache "serves as a read cache to speed up reading data from a state store" - Record Caches Kafka Streams



但是,我的理解是持久模式下的 RocksDB 首先缓冲在内存中,只有在状态不适合 RAM 时才会扩展到磁盘。

RocksDB is just used as an internal lookup table (that is able to flush to disk if the state does not fit into memory RocksDB flushing is only required because state could be larger than available main-memory. Kafka Streams Internal Data Management



那么,如果记录缓存都缓存在内存中,那么记录缓存如何加快从状态存储中读取的速度呢?在我看来,记录缓存与 RocksDB 行为重叠。

最佳答案

您的观察是正确的,这取决于用例是否需要缓存。应用级缓存(而不是 RocksDB 缓存)的一大优势是它减少了写入更改日志主题的记录数量,该主题用于使存储容错。因此,它减少了 Kafka 集群的负载,还可以减少恢复时间。

对于 DSL 用户,缓存也会对下游负载产生影响(您可能对您的应用程序不感兴趣,因为您似乎正在使用处理器 API):

  • https://www.confluent.io/blog/kafka-streams-take-on-watermarks-and-triggers
  • https://www.confluent.io/blog/watermarks-tables-event-time-dataflow-model/
  • https://docs.confluent.io/current/streams/developer-guide/memory-mgmt.html
  • https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Streams+Internal+Data+Management
  • 关于apache-kafka - 如果 RocksDB 缓存在内存中,为什么要在 Kafka Streams Processor API 中启用记录缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56365156/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com