Akka Streams and Pekko Streams (Scala)
Quick start
- Think twice before using Streams: prefer plain functions, even for I/O.
- Test stream components using
TestSource,TestSink, andTestProbefromakka-stream-testkit. - Always define supervision strategies for error handling; default behavior tears down the entire stream.
- Read
references/akka-streams.mdfor core concepts and patterns. - Read
references/best-practices.mdfor critical guidance on when NOT to use streams. - Read
references/testing.mdfor comprehensive testing examples.
When NOT to use Streams
- Don't model plain data transformations as stream operators; use regular functions instead.
- Don't use streams for general I/O; prefer plain functions or other abstractions.
Workflow
- Verify that Streams are the right tool: do you need dataflow or reactive programming patterns?
- Design
Source,Flow, andSinkcomponents as separate, testable units. - Define error handling with
recover,recoverWithRetries, or supervision strategies. - Test each component with
TestSource/TestSinkorTestProbebefore integration. - Compose the final graph and materialize with explicit error handling.
Testing rules
- Write tests using
akka-stream-testkitfor custom stream components. - Use
TestSource.probeandTestSink.probefor fine-grained control over element flow. - Test backpressure behavior explicitly using
request()andexpectNoMessage(). - Test error scenarios with
expectError()or supervision strategies.
Pekko Streams
- Pekko Streams is a fork of Akka Streams with identical APIs (package names change from
akka.*toorg.apache.pekko.*). - All guidance for Akka Streams applies equally to Pekko Streams.
- When working with Pekko, adjust imports but keep patterns and testing approaches identical.
Output expectations
- Keep stream topologies simple and testable; break complex graphs into named components.
- Make error handling explicit via supervision or recovery operators.
- Prefer immutability; stream graphs are blueprints until materialized.
References
- Load
references/akka-streams.mdfor core concepts, operators, and materialization. - Load
references/best-practices.mdfor critical guidance on avoiding stream overuse. - Load
references/testing.mdfor testing patterns and complete examples.