|Original author(s)||Jonas Bonér|
|Initial release||July 2009|
2.6.19 / March 21, 2022
|Platform||Java Virtual Machine|
Akka is a source-available toolkit and runtime simplifying the construction of concurrent and distributed applications on the JVM. Akka supports multiple programming models for concurrency, but it emphasizes actor-based concurrency, with inspiration drawn from Erlang.
An actor implementation, written by Philipp Haller, was released in July 2006 as part of Scala 2.1.7. By 2008 Scala was attracting attention for use in complex server applications, but concurrency was still typically achieved by creating threads that shared memory and synchronized when necessary using locks. Aware of the difficulties with that approach and inspired by the Erlang programming language's library support for writing highly concurrent, event-driven applications, the Swedish programmer Jonas Bonér created Akka to bring similar capabilities to Scala and Java. Bonér began working on Akka in early 2009 and wrote up his vision for it in June of that year. The first public release was Akka 0.5, announced in January 2010. Akka is now part of the Lightbend Platform together with the Play framework and the Scala programming language.
In September 2022, Lightbend announced that Akka would change its license from the free software license Apache License 2.0 to a proprietary source-available license, known as the Business Source License (BSL). Any new code under the BSL would become available under the Apache License after three years.
The key points distinguishing applications based on Akka actors are:
- Concurrency is message-based and asynchronous: typically no mutable data are shared and no synchronization primitives are used; Akka implements the actor model.
- The way actors interact is the same whether they are on the same host or separate hosts, communicating directly or through routing facilities, running on a few threads or many threads, etc. Such details may be altered at deployment time through a configuration mechanism, allowing a program to be scaled up (to make use of more powerful servers) and out (to make use of more servers) without modification.
- Actors are arranged hierarchically with regard to program failures, which are treated as events to be handled by an actor's supervisor (regardless of which actor sent the message triggering the failure). In contrast to Erlang, Akka enforces parental supervision, which means that each actor is created and supervised by its parent actor.
Akka has a modular structure, with a core module providing actors. Other modules are available to add features such as network distribution of actors, cluster support, Command and Event Sourcing, integration with various third-party systems (e.g. Apache Camel, ZeroMQ), and even support for other concurrency models such as Futures and Agents.
Viktor Klang became the technical lead for the Akka project in September 2011. When Viktor became Director of Engineering at Lightbend in December 2012, Roland Kuhn became the technical lead for Akka. The main part of the development is done by a core team employed at Lightbend, supported by an active community. The current emphasis is on extending cluster support.
Relation to other libraries
Other frameworks and toolkits have emerged to form an ecosystem around Akka:
- The Spray toolkit is implemented using Akka and features a HTTP server as well as related facilities, such as a domain-specific language (DSL) for creating RESTful APIs
- The Play framework for developing web applications offers integration with Akka
- Up until version 1.6, Apache Spark used Akka for communication between nodes
- The Socko Web Server library supports the implementation of REST APIs for Akka applications
- The eventsourced library provides event-driven architecture (see also domain-driven design) support for Akka actors
- The Gatling stress test tool for load-testing web servers is built upon Akka
- The Scalatra web framework offers integration with Akka.
- The Vaadin web app development framework can integrate with Akka
- The Apache Flink (platform for distributed stream and batch data processing) RPC system is built using Akka  but isolated since v1.14.
- The Lagom framework for building reactive microservices is implemented on top of Akka.
Publications about Akka
There are several books about Akka:
- Akka Essentials
- Akka Code Examples
- Akka Concurrency
- Akka in Action
- Effective Akka
- Composable Futures with Akka 2.0, Featuring Java, Scala and Akka Code Examples
Akka also features in:
- P. Haller's "Actors in Scala"
- N. Raychaudhuri's "Scala in Action"
- D. Wampler's "Functional Programming for Java Developers"
- A. Alexander's "Scala Cookbook"
- V. Subramaniam's "Programming Concurrency on the JVM"
- M. Bernhardt's "Reactive Web Applications"
- Akka Team. "Akka 2.6.19 Released". Retrieved 5 August 2022.
- Akka Team. "Scala Actors Introduction". Retrieved 17 September 2018.
- Jovanovic, Vojin. "The Scala Actors Migration Guide". Archived from the original on 5 December 2013. Retrieved 13 March 2013.
- "Scala Version History - Older versions". scala-lang.org. 2009-02-16. Archived from the original on 2013-01-04.
- Jonas Bonér (2009-02-16). "init project setup". github.com.
- Bonér, Jonas. "Akka Actor Kernel". firstname.lastname@example.org. Archived from the original on 2016-03-04. Retrieved 2017-07-13.
- Jonas Bonér (2009-07-12). "v0.5". github.com.
- Jonas Bonér (2010-01-04). "Introducing Akka - Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Actors". jonasboner.com.
- Bonér, Jonas. "Why We Are Changing the License for Akka". Retrieved 7 September 2022.
- "Akka team". akka.io. Retrieved 6 June 2013.
- "Akka contributors list". github.com. Retrieved 6 June 2013.
- Doenitz, Mathias. "Spray toolkit". spray.io. Retrieved 6 June 2013.
- "Play framework documentation: Integrating with Akka". playframework.com. Retrieved 6 June 2013.
- "Spark project sources". github.com. Retrieved 6 June 2013.
- "Socko Web Server". sockoweb.org. Retrieved 6 June 2013.
- "eventsourced library". eligosource. Retrieved 6 June 2013.
- "Gatling stress test tool". github.com. Retrieved 6 June 2013.
- "Akka - Scalatra". scalatra.org. Retrieved 2022-10-06.
- "Vaadin in Akka". Vaadin.com. Retrieved 26 April 2014.
- "Apache Flink - Akka for the win !". flink.apache.org. Retrieved 2 December 2015.
- "Apache Flink: Scala Free in One Fifteen". flink.apache.org. Retrieved 2022-04-22.
- "Lagom - Integrating with Akka".
- Tasharofi, Samira. "Akka actor project corpus at GitHub". cs.illinois.edu. Archived from the original on 2012-10-30. Retrieved 2013-06-06.
- Gupta, Munish K. (2012). Akka Essentials. Packt Publishing. p. 334. ISBN 978-1849518284.
- Wyatt, Derek (2013). Akka Concurrency. Artima. p. 521. ISBN 978-0981531663.
- Roestenburg, Raymond (2013). Akka in Action. Manning Publications. p. 475. ISBN 978-1617291012.
- Allen, Jamie (2013). Effective Akka. O'Reilly Media. p. 74. ISBN 978-1449360078.
- Slinn, Michael (2012). Composable Futures with Akka 2.0. Micronautics Research. p. 178. ISBN 978-0984278923.
- Haller, Philipp (2012). Actors in Scala. Artima. p. 169. ISBN 978-0981531656.
- Raychaudhuri, Nilanjan (2013). Scala in Action. Manning Publications. p. 416. ISBN 978-1935182757.
- Wampler, Dean (2011). Functional Programming for Java Developers. O'Reilly Media. pp. 90. ISBN 978-1449311032.
- Alexander, Alvin (2013). Scala Cookbook. O'Reilly Media. p. 722. ISBN 978-1449339616.
- Subramaniam, Venkat (2011). Programming Concurrency on the JVM: Mastering Synchronization, STM, and Actors. Pragmatic Bookshelf. pp. 280. ISBN 978-1934356760.
- Bernhardt, Manuel (2016). Reactive Web Applications: Covers Play, Akka and Reactive Streams. Manning Publications. p. 328. ISBN 9781633430099.
- Darrow, Barb (25 June 2012). "Juniper networks signs on with Scala". gigaom.com. Archived from the original on 2 June 2013. Retrieved 8 June 2013.
- Ross, David. "Scaling the Klout API with Scala, Akka and Play". Retrieved 8 June 2013.
- Haines, Stephen (May 8, 2013). "Open source Java projects: Akka". JavaWorld. Retrieved 2020-07-15.
- "Java Magazin 6.13". jaxenter.de. Archived from the original on 13 August 2013. Retrieved 8 June 2013.