Global-scale event sourcing and event collaboration with causal consistency (This project is in maintenance mode. Only critical bugs will be fixed, but there is no more feature development.).

Gitter Build Status Stories in Ready


Please note: This project is stopped, no bugfixes, features, etc. are done.

Eventuate is a toolkit for building applications composed of event-driven and event-sourced services that communicate via causally ordered event streams. Services can either be co-located on a single node or distributed up to global scale. Services can also be replicated with causal consistency and remain available for writes during network partitions. Eventuate has a Java and Scala API, is written in Scala and built on top of Akka, a toolkit for building highly concurrent, distributed, and resilient message-driven applications on the JVM. Eventuate

  • provides abstractions for building stateful event-sourced services, persistent and in-memory query databases and event processing pipelines
  • enables services to communicate over a reliable and partition-tolerant event bus with causal event ordering and distribution up to global scale
  • supports stateful service replication with causal consistency and concurrent state updates with automated and interactive conflict resolution
  • provides implementations of operation-based CRDTs as specified in A comprehensive study of Convergent and Commutative Replicated Data Types
  • supports the development of always-on applications by allowing services to be distributed across multiple availability zones (locations)
  • supports the implementation of reliable business processes from event-driven and command-driven service interactions
  • supports the aggregation of events from distributed services for updating query databases
  • provides adapters to 3rd-party stream processing frameworks for analyzing event streams