Backpressure in stream programming
A practical mental model for keeping producers and consumers in balance.
Backpressure is what happens when a consumer cannot keep up with a producer. Without a way to communicate that fact, work accumulates in memory until latency grows, the process fails, or both.
A useful mental model
Imagine water moving through pipes of different widths. A narrow downstream pipe limits the sustainable flow of the whole system. A larger bucket between them delays the problem; it does not change the rate.
Software buffers work the same way. They are useful for absorbing bursts, but dangerous when treated as infinite capacity.
The contract
A robust stream needs an explicit answer to three questions:
- How does the consumer signal that it is full?
- What does the producer do when it receives that signal?
- Where is the maximum amount of queued work defined?
The exact mechanism differs: an awaited write, a bounded channel, a demand count, or a transport window. The principle is stable. Production must eventually be constrained by consumption.
Good backpressure is not only a performance feature. It makes overload behavior part of the design instead of an accident discovered in production.