Package org.apache.kafka.streams.kstream
Class Materialized<K,V,S extends StateStore>
- java.lang.Object
-
- org.apache.kafka.streams.kstream.Materialized<K,V,S>
-
- Type Parameters:
K
- type of record keyV
- type of record valueS
- type of state store (note: state stores always have key/value types<Bytes,byte[]>
- Direct Known Subclasses:
MaterializedInternal
public class Materialized<K,V,S extends StateStore> extends java.lang.Object
Used to describe how aStateStore
should be materialized. You can either provide a customStateStore
backend through one of the provided methods accepting a supplier or use the default RocksDB backends by providing just a store name.For example, you can read a topic as
KTable
and force a state store materialization to access the content via Interactive Queries API:StreamsBuilder builder = new StreamsBuilder(); KTable<Integer, Integer> table = builder.table( "topicName", Materialized.as("queryable-store-name"));
- See Also:
Stores
-
-
Field Summary
Fields Modifier and Type Field Description protected boolean
cachingEnabled
protected org.apache.kafka.common.serialization.Serde<K>
keySerde
protected boolean
loggingEnabled
protected java.time.Duration
retention
protected java.lang.String
storeName
protected StoreSupplier<S>
storeSupplier
protected java.util.Map<java.lang.String,java.lang.String>
topicConfig
protected org.apache.kafka.common.serialization.Serde<V>
valueSerde
-
Constructor Summary
Constructors Modifier Constructor Description protected
Materialized(Materialized<K,V,S> materialized)
Copy constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static <K,V,S extends StateStore>
Materialized<K,V,S>as(java.lang.String storeName)
Materialize aStateStore
with the given name.static <K,V>
Materialized<K,V,KeyValueStore<org.apache.kafka.common.utils.Bytes,byte[]>>as(KeyValueBytesStoreSupplier supplier)
Materialize aKeyValueStore
using the providedKeyValueBytesStoreSupplier
.static <K,V>
Materialized<K,V,SessionStore<org.apache.kafka.common.utils.Bytes,byte[]>>as(SessionBytesStoreSupplier supplier)
Materialize aSessionStore
using the providedSessionBytesStoreSupplier
.static <K,V>
Materialized<K,V,WindowStore<org.apache.kafka.common.utils.Bytes,byte[]>>as(WindowBytesStoreSupplier supplier)
Materialize aWindowStore
using the providedWindowBytesStoreSupplier
.static <K,V,S extends StateStore>
Materialized<K,V,S>with(org.apache.kafka.common.serialization.Serde<K> keySerde, org.apache.kafka.common.serialization.Serde<V> valueSerde)
Materialize aStateStore
with the provided key and valueSerde
s.Materialized<K,V,S>
withCachingDisabled()
Disable caching for the materializedStateStore
.Materialized<K,V,S>
withCachingEnabled()
Enable caching for the materializedStateStore
.Materialized<K,V,S>
withKeySerde(org.apache.kafka.common.serialization.Serde<K> keySerde)
Set the keySerde the materializeStateStore
will use.Materialized<K,V,S>
withLoggingDisabled()
Disable change logging for the materializedStateStore
.Materialized<K,V,S>
withLoggingEnabled(java.util.Map<java.lang.String,java.lang.String> config)
Indicates that a changelog should be created for the store.Materialized<K,V,S>
withRetention(java.time.Duration retention)
Configure retention period for window and session stores.Materialized<K,V,S>
withValueSerde(org.apache.kafka.common.serialization.Serde<V> valueSerde)
Set the valueSerde the materializedStateStore
will use.
-
-
-
Field Detail
-
storeSupplier
protected StoreSupplier<S extends StateStore> storeSupplier
-
storeName
protected java.lang.String storeName
-
valueSerde
protected org.apache.kafka.common.serialization.Serde<V> valueSerde
-
keySerde
protected org.apache.kafka.common.serialization.Serde<K> keySerde
-
loggingEnabled
protected boolean loggingEnabled
-
cachingEnabled
protected boolean cachingEnabled
-
topicConfig
protected java.util.Map<java.lang.String,java.lang.String> topicConfig
-
retention
protected java.time.Duration retention
-
-
Constructor Detail
-
Materialized
protected Materialized(Materialized<K,V,S> materialized)
Copy constructor.- Parameters:
materialized
- theMaterialized
instance to copy.
-
-
Method Detail
-
as
public static <K,V,S extends StateStore> Materialized<K,V,S> as(java.lang.String storeName)
Materialize aStateStore
with the given name.- Type Parameters:
K
- key type of the storeV
- value type of the storeS
- type of theStateStore
- Parameters:
storeName
- the name of the underlyingKTable
state store; valid characters are ASCII alphanumerics, '.', '_' and '-'.- Returns:
- a new
Materialized
instance with the given storeName
-
as
public static <K,V> Materialized<K,V,WindowStore<org.apache.kafka.common.utils.Bytes,byte[]>> as(WindowBytesStoreSupplier supplier)
Materialize aWindowStore
using the providedWindowBytesStoreSupplier
. Important: Custom subclasses are allowed here, but they should respect the retention contract: Window stores are required to retain windows at least as long as (window size + window grace period). Stores constructed viaStores
already satisfy this contract.- Type Parameters:
K
- key type of the storeV
- value type of the store- Parameters:
supplier
- theWindowBytesStoreSupplier
used to materialize the store- Returns:
- a new
Materialized
instance with the given supplier
-
as
public static <K,V> Materialized<K,V,SessionStore<org.apache.kafka.common.utils.Bytes,byte[]>> as(SessionBytesStoreSupplier supplier)
Materialize aSessionStore
using the providedSessionBytesStoreSupplier
. Important: Custom subclasses are allowed here, but they should respect the retention contract: Session stores are required to retain windows at least as long as (session inactivity gap + session grace period). Stores constructed viaStores
already satisfy this contract.- Type Parameters:
K
- key type of the storeV
- value type of the store- Parameters:
supplier
- theSessionBytesStoreSupplier
used to materialize the store- Returns:
- a new
Materialized
instance with the given sup plier
-
as
public static <K,V> Materialized<K,V,KeyValueStore<org.apache.kafka.common.utils.Bytes,byte[]>> as(KeyValueBytesStoreSupplier supplier)
Materialize aKeyValueStore
using the providedKeyValueBytesStoreSupplier
.- Type Parameters:
K
- key type of the storeV
- value type of the store- Parameters:
supplier
- theKeyValueBytesStoreSupplier
used to materialize the store- Returns:
- a new
Materialized
instance with the given supplier
-
with
public static <K,V,S extends StateStore> Materialized<K,V,S> with(org.apache.kafka.common.serialization.Serde<K> keySerde, org.apache.kafka.common.serialization.Serde<V> valueSerde)
Materialize aStateStore
with the provided key and valueSerde
s. An internal name will be used for the store.- Type Parameters:
K
- key typeV
- value typeS
- store type- Parameters:
keySerde
- the keySerde
to use. If theSerde
is null, then the default key serde from configs will be usedvalueSerde
- the valueSerde
to use. If theSerde
is null, then the default value serde from configs will be used- Returns:
- a new
Materialized
instance with the given key and value serdes
-
withValueSerde
public Materialized<K,V,S> withValueSerde(org.apache.kafka.common.serialization.Serde<V> valueSerde)
Set the valueSerde the materializedStateStore
will use.- Parameters:
valueSerde
- the valueSerde
to use. If theSerde
is null, then the default value serde from configs will be used. If the serialized bytes is null for put operations, it is treated as delete operation- Returns:
- itself
-
withKeySerde
public Materialized<K,V,S> withKeySerde(org.apache.kafka.common.serialization.Serde<K> keySerde)
Set the keySerde the materializeStateStore
will use.- Parameters:
keySerde
- the keySerde
to use. If theSerde
is null, then the default key serde from configs will be used- Returns:
- itself
-
withLoggingEnabled
public Materialized<K,V,S> withLoggingEnabled(java.util.Map<java.lang.String,java.lang.String> config)
Indicates that a changelog should be created for the store. The changelog will be created with the provided configs.Note: Any unrecognized configs will be ignored.
- Parameters:
config
- any configs that should be applied to the changelog- Returns:
- itself
-
withLoggingDisabled
public Materialized<K,V,S> withLoggingDisabled()
Disable change logging for the materializedStateStore
.- Returns:
- itself
-
withCachingEnabled
public Materialized<K,V,S> withCachingEnabled()
Enable caching for the materializedStateStore
.- Returns:
- itself
-
withCachingDisabled
public Materialized<K,V,S> withCachingDisabled()
Disable caching for the materializedStateStore
.- Returns:
- itself
-
withRetention
public Materialized<K,V,S> withRetention(java.time.Duration retention) throws java.lang.IllegalArgumentException
Configure retention period for window and session stores. Ignored for key/value stores. Overridden by pre-configured store suppliers (as(SessionBytesStoreSupplier)
oras(WindowBytesStoreSupplier)
). Note that the retention period must be at least long enough to contain the windowed data's entire life cycle, from window-start through window-end, and for the entire grace period.- Returns:
- itself
- Throws:
java.lang.IllegalArgumentException
- if retention is negative or can't be represented aslong milliseconds
-
-