Skip to main content

Caching

Introduction

Cache Interceptor is designed to improve the performance of record retrieval in a Kafka cluster by caching records.

It intercepts produce and fetch requests, caching produced records and serving fetched records from the cache if available.

Benefits

Cache Interceptor offers several benefits:

  • 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

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: IN_MEMORY.
rocksdbConfigRocksdb ConfigConfiguration for rocksdb cache.
inMemConfigIn Mem ConfigConfiguration for im-memory cache.

RocksdbConfig

configtypedescription
dbPathStringPath to RocksDB database
cacheSizeintRocksDB cache size in bytes, default: 100MB

InMemConfig

configtypedescription
cacheSizeintIn-memory cache size.
expireTimeMslongIn-memory cache expiration time in milliseconds.

Example

{
"name": "myCacheInterceptor",
"pluginClass": "io.conduktor.gateway.interceptor.CacheInterceptorPlugin",
"priority": 100,
"config": {
"topic": ".*",
"cacheConfig": {
"type": "ROCKSDB",
"rocksdbConfig": {
"dbPath": "/caching_storage",
"cacheSize": 104857600
}
}
}
}