Skip to content

Releases: thriving-dev/kafka-streams-cassandra-state-store

0.7.0

23 Jul 15:32

Choose a tag to compare

Added

  • Advanced, optimised, efficient, custom implementation of ReadOnlyKeyValueStore for 'Interactive Queries' for 'partitioned' type CassandraKeyValueStore #25
    • Offered by CassandraStateStore static methods, for an example please check the README
      • CassandraStateStore#readOnlyPartitionedKeyValueStore(KafkaStreams, String, CqlSession, String, boolean, String, Serde, Serde)
      • CassandraStateStore#readOnlyPartitionedKeyValueStore(KafkaStreams, String, CqlSession, String, boolean, String, Serde, Serde, Function, StreamPartitioner)
  • New example 'partitioned-store-restapi' featuring the new CassandraPartitionedReadOnlyKeyValueStore #25
    • Implements a REST API with endpoints for all available 'Interactive Query' methods to play with hands-on

Changed

  • Integration test is renamed WordCountGlobalStoreTest -> WordCountGlobalKeyValueStoreTest #25
    • test + assertions added for ReadOnlyKeyValueStore.all()

Removed

  • First impl. of CassandraStateStore#readOnlyPartitionedKeyValueStore(KafkaStreams, String) was removed and replaced by the more complex methods that return an instance of CassandraPartitionedReadOnlyKeyValueStore (already mentioned above) #25

0.6.0

13 Jul 21:27

Choose a tag to compare

Changed

  • to have an explicit naming of store types, it was decided to rename CassandraStores.keyValueStore to CassandraStores.partitionedKeyValueStore #24
  • the renamed partitionedKeyValueStore is no longer recommended as the default choice #24

0.5.0

09 Jul 11:29

Choose a tag to compare

Added

  • 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)

Changed

  • 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

30 May 18:10

Choose a tag to compare

Added

  • 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

Changed

  • store size via approximateNumEntries is now by default disabled - opt-in option has been added to builder - ref #10

Fixed

  • bug: cassandra concurrent schema updates (initial concurrent table auto-creation) #12
  • small fix: example 'processor-api-all-range-prefix-count' not runnable

Other

  • documentation improved

0.3.2

17 Apr 07:13

Choose a tag to compare

Changed

  • fix: small refactoring to allow better reuse of AbstractCassandraKeyValueStoreRepository

Changed (documentation only)

  • feat: improve documentation for recommended kafka streams config
  • feat: add documentation on 'Cassandra table partitioning' (avoiding large partitions)

0.3.1

09 Mar 22:43

Choose a tag to compare

(Added)

  • 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

Changed / Removed

  • Simplified overly complex class name to GlobalCassandraKeyValueStoreRepository.

0.3.0

26 Feb 18:27

Choose a tag to compare

Added

  • approximateNumEntries was added using SELECT COUNT(*) with WARN log & request timeout of 5s

Changed / Removed

  • keyValueStore now supports org.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)
  • 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

Removed

  • 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)

Security

  • successfully tested the library against 'CQL injection' via withTableOptions(..)
    => tried to add compaction = { 'class' : 'LeveledCompactionStrategy' };DROP TABLE xyz which fails due to wrong syntax in Cassandra 3.11/4.1 & ScyllaDB 5.1

0.2.0

12 Feb 14:05

Choose a tag to compare

Added

  • feat: implements StateStore.query
  • improved javadoc
  • adds documentation on
    • store types + operations
    • builder & options
    • link to examples
    • known limitations
    • cassandra specifics

Fixed

  • for any bug fixes

0.1.0

09 Jan 09:53

Choose a tag to compare

First public release