Class RocksDBStore
- java.lang.Object
-
- org.apache.kafka.streams.state.internals.RocksDBStore
-
- All Implemented Interfaces:
StateStore,BatchWritingStore,KeyValueStore<org.apache.kafka.common.utils.Bytes,byte[]>,ReadOnlyKeyValueStore<org.apache.kafka.common.utils.Bytes,byte[]>
- Direct Known Subclasses:
RocksDBTimestampedStore
public class RocksDBStore extends java.lang.Object implements KeyValueStore<org.apache.kafka.common.utils.Bytes,byte[]>, BatchWritingStore
A persistent key-value store based on RocksDB.
-
-
Field Summary
Fields Modifier and Type Field Description protected booleanopen
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddToBatch(KeyValue<byte[],byte[]> record, org.rocksdb.WriteBatch batch)KeyValueIterator<org.apache.kafka.common.utils.Bytes,byte[]>all()Return an iterator over all keys in this store.longapproximateNumEntries()Return an approximate count of key-value mappings in this store.voidclose()Close the storage engine.byte[]delete(org.apache.kafka.common.utils.Bytes key)Delete the value from the store (if there is one).voidflush()Flush any cached databyte[]get(org.apache.kafka.common.utils.Bytes key)Get the value corresponding to this key.org.rocksdb.OptionsgetOptions()voidinit(ProcessorContext context, StateStore root)Initializes this state store.booleanisOpen()Is this store open for reading and writingjava.lang.Stringname()The name of this store.booleanpersistent()Return if the storage is persistent or not.voidput(org.apache.kafka.common.utils.Bytes key, byte[] value)Update the value associated with this key.voidputAll(java.util.List<KeyValue<org.apache.kafka.common.utils.Bytes,byte[]>> entries)Update all the given key/value pairs.byte[]putIfAbsent(org.apache.kafka.common.utils.Bytes key, byte[] value)Update the value associated with this key, unless a value is already associated with the key.KeyValueIterator<org.apache.kafka.common.utils.Bytes,byte[]>range(org.apache.kafka.common.utils.Bytes from, org.apache.kafka.common.utils.Bytes to)Get an iterator over a given range of keys.voidwrite(org.rocksdb.WriteBatch batch)
-
-
-
Method Detail
-
init
public void init(ProcessorContext context, StateStore root)
Description copied from interface:StateStoreInitializes this state store.The implementation of this function must register the root store in the context via the
ProcessorContext.register(StateStore, StateRestoreCallback)function, where the firstStateStoreparameter should always be the passed-inrootobject, and the second parameter should be an object of user's implementation of theStateRestoreCallbackinterface used for restoring the state store from the changelog.Note that if the state store engine itself supports bulk writes, users can implement another interface
BatchingStateRestoreCallbackwhich extendsStateRestoreCallbackto let users implement bulk-load restoration logic instead of restoring one record at a time.- Specified by:
initin interfaceStateStore
-
name
public java.lang.String name()
Description copied from interface:StateStoreThe name of this store.- Specified by:
namein interfaceStateStore- Returns:
- the storage name
-
persistent
public boolean persistent()
Description copied from interface:StateStoreReturn if the storage is persistent or not.- Specified by:
persistentin interfaceStateStore- Returns:
trueif the storage is persistent—falseotherwise
-
isOpen
public boolean isOpen()
Description copied from interface:StateStoreIs this store open for reading and writing- Specified by:
isOpenin interfaceStateStore- Returns:
trueif the store is open
-
put
public void put(org.apache.kafka.common.utils.Bytes key, byte[] value)Description copied from interface:KeyValueStoreUpdate the value associated with this key.- Specified by:
putin interfaceKeyValueStore<org.apache.kafka.common.utils.Bytes,byte[]>- Parameters:
key- The key to associate the value tovalue- The value to update, it can benull; if the serialized bytes are alsonullit is interpreted as deletes
-
putIfAbsent
public byte[] putIfAbsent(org.apache.kafka.common.utils.Bytes key, byte[] value)Description copied from interface:KeyValueStoreUpdate the value associated with this key, unless a value is already associated with the key.- Specified by:
putIfAbsentin interfaceKeyValueStore<org.apache.kafka.common.utils.Bytes,byte[]>- Parameters:
key- The key to associate the value tovalue- The value to update, it can benull; if the serialized bytes are alsonullit is interpreted as deletes- Returns:
- The old value or
nullif there is no such key.
-
putAll
public void putAll(java.util.List<KeyValue<org.apache.kafka.common.utils.Bytes,byte[]>> entries)
Description copied from interface:KeyValueStoreUpdate all the given key/value pairs.- Specified by:
putAllin interfaceKeyValueStore<org.apache.kafka.common.utils.Bytes,byte[]>- Parameters:
entries- A list of entries to put into the store; if the serialized bytes are alsonullit is interpreted as deletes
-
get
public byte[] get(org.apache.kafka.common.utils.Bytes key)
Description copied from interface:ReadOnlyKeyValueStoreGet the value corresponding to this key.- Specified by:
getin interfaceReadOnlyKeyValueStore<org.apache.kafka.common.utils.Bytes,byte[]>- Parameters:
key- The key to fetch- Returns:
- The value or null if no value is found.
-
delete
public byte[] delete(org.apache.kafka.common.utils.Bytes key)
Description copied from interface:KeyValueStoreDelete the value from the store (if there is one).- Specified by:
deletein interfaceKeyValueStore<org.apache.kafka.common.utils.Bytes,byte[]>- Parameters:
key- The key- Returns:
- The old value or
nullif there is no such key.
-
range
public KeyValueIterator<org.apache.kafka.common.utils.Bytes,byte[]> range(org.apache.kafka.common.utils.Bytes from, org.apache.kafka.common.utils.Bytes to)
Description copied from interface:ReadOnlyKeyValueStoreGet an iterator over a given range of keys. This iterator must be closed after use. The returned iterator must be safe fromConcurrentModificationExceptions and must not return null values. No ordering guarantees are provided.- Specified by:
rangein interfaceReadOnlyKeyValueStore<org.apache.kafka.common.utils.Bytes,byte[]>- Parameters:
from- The first key that could be in the rangeto- The last key that could be in the range- Returns:
- The iterator for this range.
-
all
public KeyValueIterator<org.apache.kafka.common.utils.Bytes,byte[]> all()
Description copied from interface:ReadOnlyKeyValueStoreReturn an iterator over all keys in this store. This iterator must be closed after use. The returned iterator must be safe fromConcurrentModificationExceptions and must not return null values. No ordering guarantees are provided.- Specified by:
allin interfaceReadOnlyKeyValueStore<org.apache.kafka.common.utils.Bytes,byte[]>- Returns:
- An iterator of all key/value pairs in the store.
-
approximateNumEntries
public long approximateNumEntries()
Return an approximate count of key-value mappings in this store.RocksDBcannot return an exact entry count without doing a full scan, so this method relies on therocksdb.estimate-num-keysproperty to get an approximate count. The returned size also includes a count of dirty keys in the store's in-memory cache, which may lead to some double-counting of entries and inflate the estimate.- Specified by:
approximateNumEntriesin interfaceReadOnlyKeyValueStore<org.apache.kafka.common.utils.Bytes,byte[]>- Returns:
- an approximate count of key-value mappings in the store.
-
flush
public void flush()
Description copied from interface:StateStoreFlush any cached data- Specified by:
flushin interfaceStateStore
-
addToBatch
public void addToBatch(KeyValue<byte[],byte[]> record, org.rocksdb.WriteBatch batch) throws org.rocksdb.RocksDBException
- Specified by:
addToBatchin interfaceBatchWritingStore- Throws:
org.rocksdb.RocksDBException
-
write
public void write(org.rocksdb.WriteBatch batch) throws org.rocksdb.RocksDBException- Specified by:
writein interfaceBatchWritingStore- Throws:
org.rocksdb.RocksDBException
-
close
public void close()
Description copied from interface:StateStoreClose the storage engine. Note that this function needs to be idempotent since it may be called several times on the same state store.Users only need to implement this function but should NEVER need to call this api explicitly as it will be called by the library automatically when necessary
- Specified by:
closein interfaceStateStore
-
getOptions
public org.rocksdb.Options getOptions()
-
-