Skip to content

Can one flow melt the downstream system?

Elevator answer

If one CSV can create 80,000 supplier calls, somebody must decide how many may run at once. Reactor cannot guess the partner’s rate limit from the mood of the event loop.

3 coffee-machine misconceptions

Async Andy

“Fan out first; capacity will introduce itself.”

Kafka Frank

“The broker is infinite until the bill arrives.”

Microservice Mike

“Downstream is someone else’s incident.”

The real explanation

Backpressure begins with an ordinary disaster: one uploaded CSV becomes 80,000 payments, the provider accepts 200 requests per second, and every timeout schedules another attempt. Without limits, a perfectly reasonable file becomes a denial-of-service attack with a purchase order. The reactive library can slow a publisher; it cannot invent the provider's capacity or your queue budget.

TPF makes the flow shape visible, which helps teams reason about cardinality and split/merge behavior. It does not promise that every boundary is automatically safe. Connectors need admission limits, runtime mappings need appropriate concurrency, and operators need visibility into queue depth and downstream saturation. A step that creates parallel work must preserve deterministic ordering and lineage where the business contract requires it.

The practical question is not “does the framework have backpressure?” It is “what happens when the receiver is slower than the sender, and who owns the waiting, rejection, retry, or handoff?” TPF provides places to model those answers. The platform and application teams must choose capacity and failure policy honestly.

The trade-off is that capacity becomes design work rather than an accidental tuning setting. That is still better than discovering the effective limit when a dependency falls over.

Trade-offs

TPF gains a visible flow model for concurrency. It gives up effortless scalability claims. Teams must design and observe limits at every important boundary.

When TPF is not a good fit

If a workload is tiny and bounded, sophisticated backpressure design may be unnecessary. Do not add queues and fan-out simply because a framework can represent them.