We are pleased to announce a new patch release of Akka 2.5. Great news, with this release we have declared the new Actor APIs (Akka Typed) and Artery ready for use in production, more about that below.
An API for a distributed lease (lock) has been added to a new module called Akka Coordination. The lease can be used with Cluster Sharding and Singleton, as well as Lightbend’s Split Brain Resolver for additional additional safety measures for split brain scenarios. More details below.
Some other notable improvements and bug fixes in 2.5.22 are:
- Performance improvement of DNS resolution for SRV records 25948
- Simplify backoff supervision API, thanks to @nvollmar, #26156
GraphStage, thanks to @nvollmar, #25324
- New shutdown reasons added to
- Enable new serializer for
ShardRegionStatsthat was added in 2.5.18, see rolling updates
- Less restrictive pattern for matching SRV service names, #26332
- Fix race condition in lazy sink on immediate failure, #25410
FlowWithContext, similar for
- Switch to Scalafmt #26356
A total of 125 issues were closed since 2.5.21. The complete list can be found on the 2.5.22 milestone on github.
New Actor API (Akka Typed)
After much testing and intense development of a few important features we are confident that Akka Typed has the quality and performance to be used in production.
It’s still marked as may change, which means that API or semantics can change without warning or deprecation period. For Akka Typed we have iterated over the APIs for a long time so we don’t expect any major changes, but your feedback is very much welcome. Such changes, if any, will be collected and performed in Akka 2.6.0 rather than in upcoming 2.5.x patch versions. The APIs of Akka Typed will be fully stable in Akka 2.6.0. This will give you a good period of stability without having to worry about changes in each version. We will of course backport critical bug fixes.
Additions and changes:
- Addition of message routers, see documentation, #25612
- Support for deleting snapshots and events by introducing
RetentionCriteria, see documentation, #24698
- The way to declare when snapshots should be stored changed with the new
RetentionCriteria, see snapshotting
- Supervision when combining typed and typed actors changed. The default supervision for untyped actors is to restart where as for typed it is to stop. When combining untyped and and typed actors the default supervision is based on the default behavior of the child i.e. if an untyped actor creates a typed child, its default supervision will be to stop. If a typed actor creates an untyped child, its default supervision will be to restart.
- Fix memory leak in
watchWith, thanks to @longshorej, #26625
- Prevent surprising ordering of
unstashAlland side effects in
- Use signals instead of callbacks in
- Change signature of
- New classes for
- Fix leak of timers when stopping, #26285
- Handle exceptions, unhandled, stopped, and same in
- More robust way to discard obsolete timer messages, #26556
- Access to
- Support mutable state in
After some final scalability testing we can now declare Artery TCP ready to be used in production. In Akka 2.6.0 we will make the Artery TCP transport the default for actor messaging. See the short migration guide for how to switch. Classic remoting will be deprecated in 2.6.0 and removed earliest in 2.7.0.
Artery improves stability for systems using Akka Cluster and also has much better performance.
One thing to be aware of is that rolling update from classic remoting to Artery is not supported since the protocol is completely different. It will require a full cluster shutdown and new startup.
The distributed lease can be used for additional additional safety measures for split brain scenarios in the following modules:
- Lightbend’s Split Brain Resolver. An additional safety measure so that only one SBR instance can make the decision to remain up.
- Cluster Singleton. A singleton manager can be configured to acquire a lease before creating the singleton.
- Cluster Sharding. Each shard can be configured to acquire a lease before creating entity actors.
An implementation for Kubernetes is available for Lightbend customers.
Note that akka-coordination is a new transitive dependency from
akka-cluster-tools. When using a build tool such as sbt, Maven or Gradle this dependency
will automatically be included, otherwise you need to add it if you use Cluster Sharding or Cluster Singleton.
For this release we had the help of 34 committers – thank you all very much!
commits added removed 53 25442 21331 Patrik Nordwall 28 3579 878 Johan Andrén 20 521 283 Arnout Engelen 18 2977 430 Christopher Batey 13 952 869 Nicolas Vollmar 12 837 271 Helena Edelson 7 13 7 Yoel Garcia Diaz 6 467 67 Luc Bourlier 5 172 68 Gaël Bréard 5 26 147 Johannes Rudolph 5 26 22 Enno 4 19 6 Varun Sivapalan 2 36 16 Ignasi Marimon-Clos 2 21 11 kerr 2 3 9 Tim Moore 2 3 3 Hungai Amuhinda 1 86 86 Seth Tisue 1 83 78 Heiko Seeberger 1 91 62 Tzu-Chiao Yeh 1 80 29 Renato Cavalcanti 1 43 33 Yaroslav Klymko 1 18 16 Jason Longshore 1 9 9 Leandro 1 11 6 daniperez 1 12 2 Adriaan Groenenboom 1 3 4 Dale Wijnand 1 3 3 Yoel García Díaz 1 2 2 zhongl 1 4 0 James Roper 1 1 1 Piotr Gawryś 1 1 1 Vasilis Nicolaou 1 1 1 Zili Chen 1 1 1 Martynas Mickevičius 1 1 1 Tomek Kopczynski
– The Akka Team