Scenario 12.0.4 · Capstone: multi-DC active-active event backbone
Multi-region active-active Kafka event backbone
Two regions each own a region-named topic, mirror it bidirectionally (local read/write, remote read-only), and run region-pinned consumers subscribed to both - so every side reads the global stream exactly once. An inter-region cut grows mirror lag; a heal drains it.
Run this scenario in the playgroundActive-active backbone ready. t+0.000s
West owns west.events (local r/w) and mirrors it east; East owns east.events and mirrors it west. Each region runs its own 3-voter KRaft quorum and a region-pinned consumer subscribed to BOTH topics - so each side reads the global stream.
Open at this step: step 1, Active-active backbone readyBoth writes propagate to both sides. t+1.600s
pw wrote Ew1 to west.events and pe wrote Ee1 to east.events. The bidirectional mirror carries each write to the other region, so both region-pinned consumers converge on the same global set - each event read exactly once per side.
Open at this step: step 2, Both writes propagate to both sidesInter-region cut - local writes continue. t+2.200s
The link between regions is cut. Each region keeps taking LOCAL writes against its own quorum (Ew2 on west, Ee2 on east) - active-active means neither side depends on the other to serve. The cross-region mirror can no longer flow.
Open at this step: step 3, Inter-region cut - local writes continueMirror lag grows across the cut. t+2.900s
With the regions partitioned, the new local writes (Ew2, Ee2) pile up un-mirrored - each side's view of the OTHER region's stream falls behind. The lag is the unreplicated backlog waiting on the link.
Open at this step: step 4, Mirror lag grows across the cutHealed - backlog drains, sides re-converge. t+3.600s
The link heals; the backlogged writes mirror across in both directions and both region-pinned consumers re-converge on the full global stream. No write was lost - active-active tolerates an inter-region outage and catches up.
Open at this step: step 5, Healed - backlog drains, sides re-convergeWhat you start with
A global active-active event backbone built the safe way. Each region owns and writes only its own region-prefixed topic (`west.events` / `east.events`), each topic is mirrored bidirectionally to the other region with an identity policy (local read/write, remote read-only), and a region-pinned consumer on each side subscribes to BOTH topics - so every region reads the full global stream exactly once. An inter-region cut then grows mirror lag, and a heal drains it.
Step by step
- Active-active backbone ready t+0.000s West owns west.events (local r/w) and mirrors it east; East owns east.events and mirrors it west. Each region runs its own 3-voter KRaft quorum and a region-pinned consumer subscribed to BOTH topics - so each side reads the global stream. Open at this step: step 1, Active-active backbone ready
- Both writes propagate to both sides t+1.600s pw wrote Ew1 to west.events and pe wrote Ee1 to east.events. The bidirectional mirror carries each write to the other region, so both region-pinned consumers converge on the same global set - each event read exactly once per side. Open at this step: step 2, Both writes propagate to both sides
- Inter-region cut - local writes continue t+2.200s The link between regions is cut. Each region keeps taking LOCAL writes against its own quorum (Ew2 on west, Ee2 on east) - active-active means neither side depends on the other to serve. The cross-region mirror can no longer flow. Open at this step: step 3, Inter-region cut - local writes continue
- Mirror lag grows across the cut t+2.900s With the regions partitioned, the new local writes (Ew2, Ee2) pile up un-mirrored - each side's view of the OTHER region's stream falls behind. The lag is the unreplicated backlog waiting on the link. Open at this step: step 4, Mirror lag grows across the cut
- Healed - backlog drains, sides re-converge t+3.600s The link heals; the backlogged writes mirror across in both directions and both region-pinned consumers re-converge on the full global stream. No write was lost - active-active tolerates an inter-region outage and catches up. Open at this step: step 5, Healed - backlog drains, sides re-converge
The takeaway
Region-namespaced topics plus identity bidirectional mirrors let both regions take writes at once while every consumer still sees the de-duplicated global stream - and an inter-region partition only stalls cross-region delivery, never local writes.
Embed this scenario
Paste this into a blog post, a course page or your team's docs. The scenario plays inside your page, and the link under it points readers to this walkthrough.
<iframe src="https://monedula.dev/kafka-simulator/embed/?scenario=12.0.4" title="Kafka Simulator: Capstone: multi-DC active-active event backbone" width="100%" height="520" style="border:1px solid #d0d0d0;border-radius:8px" loading="lazy"></iframe>
<p><a href="https://monedula.dev/kafka-simulator/scenarios/active-active-event-backbone/">Multi-region active-active Kafka event backbone</a></p>