// AKKA.STREAMS

Reactive .NET Pipelines with Backpressure

Akka.Streams builds composable, strongly typed .NET data pipelines that apply backpressure when a database, API, or consumer slows down. Producers slow safely instead of overwhelming downstream services or filling memory with queued work.

ref: when-to-use-it

// WHEN_TO_USE_IT

Choose the Right .NET Pipeline

Use Akka.Streams when a multi-stage pipeline needs backpressure, bounded resource use, supervision, or connectors such as Kafka and RabbitMQ. Use IAsyncEnumerable, Channels, or TPL Dataflow for a smaller in-process pipeline when you do not need a full stream graph. Use a queue and background workers when work must survive process restarts or be scheduled independently of the request that created it.

ref: pipeline

// SOURCE_FLOW_SINK

Composable Pipeline Architecture

Build processing graphs by composing Sources, Flows, and Sinks. Each stage is strongly typed, independently configurable, and backpressure-aware.

Akka.Streams pipeline: Source → Flow → Sink with backpressure Akka.Streams pipeline: Source → Flow → Sink with backpressure

Source produces, Flow transforms, Sink consumes — backpressure flows upstream automatically

ref: backpressure

// BACKPRESSURE

Automatic Flow Control

When downstream can't keep up, the entire pipeline throttles automatically. No dropped messages, no manual flow control code.

Backpressure: automatic flow control when downstream slows Backpressure: automatic flow control when downstream slows

Database slows down → Request(n) propagates upstream → Source pauses → resumes when recovered

ref: code

// IN_CODE

Looks Like LINQ, Runs Like a Pipeline

Build a stream, compose stages, throttle to 100/sec, and materialize it as an IAsyncEnumerable that any .NET developer can consume.

OrderPipeline.cs
// Build a composable stream pipeline
var results = Source
    .From(orders)
    .Via(Flow.Create<Order>()
        .Select(o => Validate(o))
        .Where(o => o.IsValid)
        .Throttle(100, TimeSpan.FromSeconds(1))) // rate limit: 100/sec
    .RunAsAsyncEnumerable(materializer);

// Consume as IAsyncEnumerable — familiar to any .NET dev
await foreach (var order in results)
{
    await ProcessOrder(order);
}
ref: features

// KEY_CAPABILITIES

Stream Processing Features

Backpressure-Aware

Reactive Streams implementation automatically pauses upstream producers when downstream consumers can't keep up. No manual semaphores or flow control needed.

Composable Pipelines

Build complex processing graphs by composing sources, flows, and sinks. Each stage has independent error handling and parallelism settings.

Extremely Low Resources

Single-threaded, non-blocking execution. Production users report managing massive parquet files with under 60MB RAM per process.

IAsyncEnumerable Materialization

Expose complex Streams workflows as IAsyncEnumerable that other .NET developers can easily recognize and consume.

ref: kafka

// KAFKA_INTEGRATION

85% Less Code Than
Raw Confluent.Kafka

Akka.Streams.Kafka sits on top of Confluent.Kafka and eliminates the distributed systems boilerplate: built-in backpressure, supervision strategies for error handling, transparent partition rebalancing, and compositional design. Read the full comparison or explore the demo repo.

// CONNECTORS

Kafka RabbitMQ Amazon SQS Azure Service Bus Azure Event Hubs Google Pub/Sub
ref: customers

// WHO_USES_THIS

Ecco / Sneaks and Data

Retail / Data Science — Denmark

Ecco's data science subsidiary uses Akka.Streams as the backbone of their Spark cluster workload management, ML execution (10,000+ parallel compute requests via MergeHub), and real-time data streaming across 20+ countries. They built a simpler streaming alternative to Kafka and Kinesis with Akka.Streams, reducing operational complexity and hiring requirements.

Ecco Priva Syngenta
ref: newsletter

// STAY_CONNECTED