A two-hour outage leaves a million events in the outbox. Flushing them is how you turn one incident into two. Why a fixed drain rate is a guess, and how to build a closed-loop drain in Spring Boot that lets downstream latency set the pace.
Lag is climbing, so you raise the concurrency. Now it is worse. Why consumer count is the wrong lever when downstream is the constraint, how slow processing triggers a rebalance death spiral, and what to tune instead in Spring Boot.
Project Loom gets discussed as one thing. It is three, at three very different maturity levels — and one of them has been in preview seven times, with breaking API changes as recently as JDK 26. What that means for a Spring Boot codebase you actually have to ship.
The dual-write bug survives @Transactional, and it quietly loses money. Here is the architecture that fixes it at a million transactions a second — a hash-partitioned outbox on Oracle, SKIP LOCKED relays and Kafka, in Java 21 and Spring Boot — plus some honest scrutiny of the numbers.
Once your data spans services, ACID stops at the service boundary. Sagas trade atomicity for availability — but the compensations, the outbox, and the isolation anomalies are where the real engineering is.