Akka Streams provides an intuitive and safe way to formulate stream processing setups such that we can then execute them efficiently and with bounded resource usage —- no more OutOfMemoryErrors.
The Akka Streams API is completely decoupled from the Reactive Streams interfaces. While Akka Streams focus on the formulation of transformations on data streams the scope of Reactive Streams is to define a common mechanism of how to move data across an asynchronous boundary without losses, buffering or resource exhaustion.
The relationship between Akka Streams and Reactive Streams is that the Akka Streams API is geared towards end-users while the Akka Streams implementation uses the Reactive Streams interfaces internally to pass data between the different operators. What this means is that you can implement an application where Akka Streams interconnect with other Reactive Streams implementations in a fully compatible way.
To learn more, have a look at the Akka Streams documentation dedicated sections:
Read the Quick Start Guide to get a feel for how streams look like and what they can do.
Read the Design Principles behind Akka Streams for a top down learning approach.
Have a look at the operator index for a complete overview of the built-in processing operators.
Check the reference guide for an in-depth documentation into specific topics.