This repository provides tools to implement event sourcing in your application.
It guaranties that:
- Events will be written in the database before being published in Kafka
- Publication in Kafka will be reattempted until it succeeds
It provides capabilities of defining two types of projections:
- "Transactional" projections, that are updated in the same transaction as the events
- "Eventually consistent" projections, updated asynchronously by consuming Kafka
It also allows storing snapshots of the application state, for scenarios that implies lot of events.
These libs are based on :
- Vavr for functional stuff (immutable
- Akka stream for reactive streams
- jackson for json
- jooq to build query
- vertx for reactive postgresql database access
- Postgresql and kafka are the in production tested data stores
commons-event: POJOs that represent the stored events. Can be used by consumers to parse events.
thoth-core: APIs for event-sourcing
thoth-jooq: A jooq simple implementation of the
thoth-jooq-async: A jooq implementation of the
thoth-coreAPIs using the
See our documentation.
- A single command can't currently modify multiple entities see this issue
Compile / Test
docker-compose -f docker-compose.test.yml up ./gradlew test
Generate the documentation
cd thoth-documentation sbt generateDoc