All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.8.0 (2023-08-26)
- feat: Implement VersionedKeyValueStore<K, V> #21
- ref KIP-889: Versioned State Stores
- New store types, provided via
CassandraStores
- partitionedVersionedKeyValueStore
- globalVersionedKeyValueStore
0.7.3 (2023-08-20)
- Ops: GitHub action step to trigger a publication to Sonatype OSS for main branch and tags
- Ops: New GitHub action for triggering 'gradle release' from repo with automatic semver
0.7.2 (2023-07-24)
- chore: example/*-restapi enable datastax-java-driver
RequestLogger
- chore: example/partitioned-store-restapi use ScyllaDB
- chore: example/partitioned-store-restapi fix main class +
application.id
- chore: polishing, more javadoc+comments,
validateIsRunningOrRebalancing()
0.7.1 (2023-07-23)
- Class is renamed to be more explicit (
CassandraReadOnlyKeyValueStore
->CassandraPartitionedReadOnlyKeyValueStore
)
0.7.0 (2023-07-23)
- Advanced, optimised, efficient, custom implementation of
ReadOnlyKeyValueStore
for 'Interactive Queries' with for 'partitioned' type CassandraKeyValueStore- Offered by
CassandraStateStore
static methods, for an example please check the READMECassandraStateStore#readOnlyPartitionedKeyValueStore(KafkaStreams, String, CqlSession, String, boolean, String, Serde, Serde)
CassandraStateStore#readOnlyPartitionedKeyValueStore(KafkaStreams, String, CqlSession, String, boolean, String, Serde, Serde, Function, StreamPartitioner)
- Offered by
- New example 'processor-api-all-range-prefix-count' featuring the new
CassandraPartitionedReadOnlyKeyValueStore
- Implements a REST API with endpoints for all available 'Interactive Query' methods to play with hands-on
- Integration test is renamed
WordCountGlobalStoreTest
->WordCountGlobalKeyValueStoreTest
- test + assertions added for
ReadOnlyKeyValueStore.all()
- test + assertions added for
- First impl. of
CassandraStateStore#readOnlyPartitionedKeyValueStore(KafkaStreams, String)
was removed and replaced by the more complex methods that return an instance ofCassandraPartitionedReadOnlyKeyValueStore
(already mentioned above)
0.6.0 (2023-07-11)
- to have an explicit naming of store types, it was decided to rename
CassandraStores.keyValueStore
toCassandraStores.partitionedKeyValueStore
- the renamed
partitionedKeyValueStore
is no longer recommended as the default choice
0.5.0 (2023-07-09)
- Interface
CassandraStateStore
#19 #20- implemented by all the libraries custom StateStore solutions (only
CassandraKeyValueStore
yet) - provides static helper methods to get ReadOnly stores for interactive queries (see docs)
- implemented by all the libraries custom StateStore solutions (only
- dependency updates, incl. kafka-streams 3.5.0 #22
Reminder: the library itself does not have any transitive dependencies. All dependencies are compileOnly or for tests.
0.4.0 (2023-05-30)
- feat: Add builder config option - opt-in to enable count for approximateNumEntries #10
- feat: Add builder config option - allow setting execution profiles (for DDL; DML) #11
- feat: Add builder config option - opt-out to avoid tables to be auto-created #9
- feat: add Quarkus examples app as GraalVM native image #7
- store size via
approximateNumEntries
is now by default disabled - opt-in option has been added to builder - ref #10
- bug: cassandra concurrent schema updates (initial concurrent table auto-creation) #12
- small fix: example 'processor-api-all-range-prefix-count' not runnable
- documentation improved
0.3.2 (2023-04-17)
- fix: small refactoring to allow better reuse of
AbstractCassandraKeyValueStoreRepository
- feat: improve documentation for recommended kafka streams config
- feat: add documentation on 'Cassandra table partitioning' (avoiding large partitions)
0.3.1 (2023-03-09)
- Adds a first set of integration tests with testcontainers
- Covering
- WordCountTest testing the kafka streams 'Hello world!' app to work with CassandraKeyValueStore
- WordCountInteractiveQueriesTest testing interactive queries incl. methods
all
,range
,prefixScan
,approximateNumEntries
- WordCountGlobalStoreTest testing
CassandraStores.globalKeyValueStore()
and store access via interactive queries
- Using
- Cassandra 4.1
- Redpanda
- Covering
- Simplified overly complex class name to
GlobalCassandraKeyValueStoreRepository
.
0.3.0 (2023-02-26)
approximateNumEntries
was added usingSELECT COUNT(*)
with WARN log & request timeout of 5s
keyValueStore
now supportsorg.apache.kafka.streams.state.ReadOnlyKeyValueStore#prefixScan(Object, Serializer)
- Implements a solution using
range
on BLOB type key using((Bytes) from).increment()
, identically to RocksDB + InMemory KV Stores - The solution now works for all CQL databases, replacing the ScyllaDB specific solution (see right below)
- Implements a solution using
- adapts, enhances example 'processor-api-all-range-prefix-count' (previously 'processor-api-prefixscan')
- added additional description to example README
- added/fixed JavaDoc for
WordCountProcessor
- now also runs
approximateNumEntries
stringKeyValueStore
was removed with all belonging code (PartitionedStringKeyScyllaKeyValueStoreRepository
, ...)- This removes the special implementation of
org.apache.kafka.streams.state.ReadOnlyKeyValueStore#prefixScan(Object, Serializer)
for ScyllaDB backed stores with String keys. (The implementation was based on ScyllaDB LIKE operator query on TEXT type clustering key) - This is longer required since replaced with generic solution implemented for
keyValueStore
(see right above)
- This removes the special implementation of
- successfully tested the library against 'CQL injection' via
withTableOptions(..)
=> tried to addcompaction = { 'class' : 'LeveledCompactionStrategy' };DROP TABLE xyz
which fails due to wrong syntax in Cassandra 3.11/4.1 & ScyllaDB 5.1
0.2.0 (2023-02-12)
- feat: implements
StateStore.query
- improved javadoc
- adds documentation on
- store types + operations
- builder & options
- link to examples
- known limitations
- cassandra specifics
- for any bug fixes
0.1.0 (2023-01-08)
First public release
Template x.y.z (yyyy-mm-dd)
- for new features
- for changes in existing functionality
- for soon-to-be removed features
- for now removed features
- for any bug fixes
- in case of vulnerabilities