Skip to main content
This feature is available with Conduktor Scale Plus and Conduktor Exchange only.

Overview

The cache is designed to improve the performance of record retrieval in a Kafka by caching records. It intercepts produce and fetch requests, caching produced records and serving fetched records from the cache, if available.

Benefits

Benefits include:
  • Improved performance. By serving fetched records from the cache, subsequent fetch requests can be served faster, reducing the overall latency and improving the response time for clients.
  • Reduced load on Kafka cluster. With the cache Interceptor in place, the Kafka cluster experiences reduced load during fetch requests since a portion of the requests can be satisfied from the cache directly, reducing the number of requests hitting the cluster.
  • Enhanced scalability. The cache Interceptor provides an additional layer of scalability by distributing the workload between the cache and the Kafka cluster. It can handle a higher volume of fetch requests without overwhelming the Kafka cluster.

Configuration options

ConfigTypeDefaultDescription
topicString.*Topic regex, topic that match this regex will have the Interceptor applied. If no value is set, it will be applied to all topics.
cacheConfigCache configConfiguration for cache.

CacheConfig

ConfigTypeDescription
typeenum (IN_MEMORY, ROCKSDB)Default: ROCKSDB.
rocksdbConfigRocksdb configConfiguration for RocksDB cache.
inMemConfigInMem configConfiguration for in-memory cache.

RocksdbConfig

ConfigTypeDefaultDescription
dbPathStringcaching_storagePath to RocksDB database.
cacheSizelong104857600RocksDB cache size in bytes (default: 100 MB).

InMemConfig

ConfigTypeDefaultDescription
cacheSizeint10000Maximum number of entries in the in-memory cache.
expireTimeMslong300000Cache expiration time in milliseconds (5 minutes).

Example

curl \
  --request PUT \
  --url 'http://localhost:8888/gateway/v2/interceptor' \
  --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "myCacheInterceptor",
  "pluginClass": "io.conduktor.gateway.interceptor.CacheInterceptorPlugin",
  "priority": 100,
  "config": {
    "topic": ".*",
    "cacheConfig": {
      "type": "ROCKSDB",
      "rocksdbConfig": {
        "dbPath": "/caching_storage",
        "cacheSize": 104857600
      }
    }
  }
}'