Martin Krasser

January 21, 2016 by

We, the Eventuate committers, are pleased to announce the availability of Eventuate 0.5. Eventuate is a toolkit for building distributed, highly-available and partition-tolerant event-sourced applications. It 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

  • allows actors to interact over a distributed, reliable and persistent event bus that preserves causal event ordering
  • derives current application state from logged events (event sourcing)
  • replicates application state by replicating events across multiple locations
  • allows updates to replicated state at multiple locations concurrently (multi-master)
  • allows individual locations to continue writing even if they are partitioned from other locations
  • provides means to detect, track and resolve conflicting updates (interactive and automated)
  • enables applications to implement a causal consistency model
  • provides implementations of operation-based CRDTs
  • supports distribution up to global scale

You can find a collection of links to more information in the project’s README. Eventuate 0.5 is a big feature and stability update from version 0.4. The following is an overview of the release highlights.


  • Eventuate has been successfully chaos-tested under the scenarios of the eventuate-chaos project. For a high-level description, see for example the operation-based Counter CRDT test scenario which was also executed with a Cassandra storage backend. Chaos was generated by randomly injecting network partitions between any Eventuate and Cassandra nodes. Furthermore, network packets have been dropped randomly too. A single missing event or a duplicate would have broken convergence and let the chaos tests fail. They have shown that the guarantees made by Eventuate actually hold und failure conditions. The failure handling consequences learned during the chaos tests are now summarized in the failure handling section of the reference documentation. We will later provide a more detailed chaos test report in a separate blog post.
  • Two new event sourcing abstractions have been added: event-sourced writers and event-sourced processors. Event-sourced writers are event-sourced views specialized to batch-update external query databases from an event stream. Hence, they update persistent read models whereas event-sourced views usually update in-memory read models. Event-sourced processors connect different event logs to event-stream processing pipelines. Both, event-sourced writers and processors support both stateful and stateless event stream processing.
  • Event-sourced actors can now persist new events also during event handling if they mixin PersistOnEvent. This is especially useful for event collaboration use cases where event-sourced actors communicate via events over distributed event logs that preserve the causal ordering of events.
  • Application can now integrate custom storage backends into Eventuate by implementing the event log storage provider interface.The internal LevelDB storage backend and Cassandra storage backend have already been updated to implement this interface.
  • All event sourcing abstractions now have handler-specific behavior stacks. This allows applications to change command handling and event handling behavior independently. When combined with command stashing this new feature can be used to implement persistent state machines.
  • Logical and physical deletion of events allows applications to cleanup local event logs. To avoid conflicts with event replication, local deletion of events can be coordinated with other locations to occur only after successful replication of these events.

A complete list of changes is given in the release notes. If you have any questions or comments, please let us know.

Written on January 21, 2016 by

with : Eventuate

< back