Event Sourcing/CQRS with Akka Persistence and Eventuate

Here’s a short post with linked slides and the recording of our first Reactive Systems Hamburg Meetup, where Martin Krasser compared the Event-Sourcing/CQRS tools Akka Persistence (which he also authored, as successor of his Eventsourced lib) and Eventuate (which he’s now building for Red Bull Media House to support a globally distributed system).

At first a bit of our meetup history: in Hamburg we had 3 meetups/user groups that were related to Scala and the Typesafe stack: the Scala Meetup itself, the Akka Meetup (organized by Lutz Hühnken and Markus Jura from Typesafe) and our Playframework Meetup (run by my colleague Markus Klink and me/Martin Grotzke). The Akka and Playframework Meetups often had overlapping topics, therefore we decided to bring them together / combine our forces. One major topic of many meetups/talks was this Reactive Thing (which happens also to be a major architectural driver in our current projects at inoio), so it was fairly obvious what the resulting meetup should be about - the Reactive Systems Hamburg Meetup was born.

One of the main advantages we see is that we’re no longer focussing on a specific product/framework, but an architectural approach instead. So now we’re looking forward to see great talks about other tools like e.g. Vert.x, ReactiveX, Reactor etc., and also about general approaches to the different reactive traits (responsive, resilient, elastic and message driven).

For our first meetup we invited Martin Krasser to talk about Event Sourcing and CQRS in distributed systems - Martin is an expert in this area. He is also the original author of Akka Persistence (an event sourcing implementation based on Akka) and also Eventuate (which adds optional partition tolerance and support for globally distributed systems, via a causal consistency model).

Here is a short overview over Martins (really great!) talk:

  • After talking about the history of Akka Persistence and Eventuate he showed the similarities of both (Scala, Akka, Streams, + Storage Backends)
    • As part of this Martin showed the life cycle and relevant command processing / state recovery related methods of event-sourced actors
  • He explained the differences of both tools
    • In terms of CAP, Akka Persistence chooses CP while Eventuate also allows to choose AP - both support strong consistency, Eventuate additionally relaxation to causal consistency
    • Martin showed how state replication of EventsourcedActors works in Eventuate, including handling of network partitions and automated and interactive conflict resolution. As part of this he also explained causal consistency (really nice!)
    • Then Martin pointed out differences regarding the event log, event routing and event collaboration (consumption of events from different event-sourced actors)
    • Afterwards he talked about the query-side differences (and how Eventuate provides causal consistency there)
  • As last part Martin did a quick comparison of Akka Distributed Data and Eventuate, and their approach to CRDTs (conflict-free replicated data types)

In summary this was an amazing talk, and afterwards Martin answered many questions and we had a great discussion! Thanks a lot to Martin and to all attendees, the first Reactive Systems Hamburg Meetup couldn’t have been better!

So now you probably want to check out Martins slides and enjoy the video!

Many thanks to my colleague Matthias Brandt for organizing the recording together with aussenborder.TV!