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[]>
public class Materialized<K,V,S extends StateStore> extends Object
Used to describe how a
StateStore
should be materialized.
You can either provide a custom StateStore
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 Serde<K>
keySerde
protected boolean
loggingEnabled
protected Duration
retention
protected String
storeName
protected StoreSupplier<S>
storeSupplier
protected Map<String,String>
topicConfig
protected Serde<V>
valueSerde
-
Constructor Summary
Constructors Modifier Constructor Description protected
Materialized(Materialized<K,V,S> materialized)
Copy constructor. -
Method Summary
Modifier and Type Method Description static <K, V, S extends StateStore>
Materialized<K,V,S>as(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(Serde<K> keySerde, 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(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(Map<String,String> config)
Indicates that a changelog should be created for the store.Materialized<K,V,S>
withRetention(Duration retention)
Configure retention period for window and session stores.Materialized<K,V,S>
withValueSerde(Serde<V> valueSerde)
Set the valueSerde the materializedStateStore
will use.
-
Field Details
-
storeSupplier
-
storeName
-
valueSerde
-
keySerde
-
loggingEnabled
protected boolean loggingEnabled -
cachingEnabled
protected boolean cachingEnabled -
topicConfig
-
retention
-
-
Constructor Details
-
Materialized
Copy constructor.- Parameters:
materialized
- theMaterialized
instance to copy.
-
-
Method Details
-
as
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(Serde<K> keySerde, 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
Set the valueSerde the materializedStateStore
will use. -
withKeySerde
Set the keySerde the materializeStateStore
will use. -
withLoggingEnabled
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
Disable change logging for the materializedStateStore
.- Returns:
- itself
-
withCachingEnabled
Enable caching for the materializedStateStore
.- Returns:
- itself
-
withCachingDisabled
Disable caching for the materializedStateStore
.- Returns:
- itself
-
withRetention
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. If not specified, the retention period would be set as the window length (from window-start through window-end) plus the grace period.- Parameters:
retention
- the retention time- Returns:
- itself
- Throws:
IllegalArgumentException
- if retention is negative or can't be represented aslong milliseconds
-