v1.4 bringt das Modul Transaktionen in den Kafka Simulator — 10 neue Szenarien zu dem Thema, bei dem Engineers am häufigsten zustimmend nicken und es am seltensten wirklich zu sehen bekommen: Exactly-once-Semantik. Das Curriculum erreicht 55 von 125.
Was in v1.4 steckt
Transaktionen machen aus einem Strom von Writes eine atomare Einheit — und sie verändern, was ein Consumer überhaupt sehen darf:
read_committedund der Last Stable Offset (LSO) — warum ein transaktionaler Consumer bis zum LSO liest statt bis zum High Watermark, und wie eine offene Transaktion diese Obergrenze festhält.- begin / commit / abort — der Transaktions-Lebenszyklus des Producers als Zustandsmaschine, die du selbst steuerst, inklusive dessen, was ein Abort-Marker mit den betroffenen Records macht.
- Die Consume–Process–Produce-Schleife —
sendOffsetsToTransaction, und warum erst das Committen der Offsets innerhalb der Transaktion Ende-zu-Ende-Exactly-once real macht. - Fencing — wie ein Zombie-Producer per Epoch ausgesperrt wird, und warum das die Absicherung unter dem gesamten Modell ist.
Exactly-once ist schwer zu vermitteln, weil so vieles daran unsichtbar bleibt: Marker, der LSO, Epochs und ein Consumer, der abgebrochene Records stillschweigend überspringt. Der Simulator legt all das auf die Timeline — du kannst zusehen, wie der LSO unter einer offenen Transaktion stillsteht und in dem Moment nach vorn springt, in dem sie committet.
Neuer Cluster-Typ im Free Play: Active/Active
Die Topologie-Leiter, die in v1.3 mit Active/Passive begann, wächst weiter: Der Free-Play-Cluster-Picker bekommt eine dritte Form — Active / Active: zwei Regionen, die beide Writes annehmen und jeweils in die andere spiegeln.
Das ist bewusst nicht „Active/Passive mit verdoppeltem Pfeil”. Das Preset ist symmetrisch:
- Jede Region besitzt ihr eigenes Topic.
westbesitztwest.orders,eastbesitzteast.orders, und jedes wird schreibgeschützt in die andere Region gespiegelt — so hält jede Seite den vollständigen Stream, ohne Mehrdeutigkeit darüber, wer bei gleichem Namen schreiben darf. - Jede Region schreibt lokal und liest global. Ein Producer schreibt immer nur in das Topic seiner eigenen Region; die Consumer-Group jeder Region liest sowohl das lokale Topic als auch die eingespiegelte Kopie, sodass jeder Record pro Seite genau einmal gesehen wird.
- Jede Region ist ihr eigener Cluster. Beide betreiben ein unabhängiges KRaft-Quorum — du kannst also die Controller einer Region killen (oder die ganze Region) und beobachten, was die überlebende Seite noch kann und was nicht.
Genau dieser letzte Punkt ist der pointierte Kontrast zu den Transaktionsgarantien, die dieses Pack lehrt: Exactly-once ist ein Versprechen pro Cluster, und ein Active/Active-Paar besteht aus zwei Clustern. Alles, was dir das Transaktionsmodul gibt, gilt innerhalb einer Region und endet am Mirror.
Das DR-Curriculum, das diese Formen erklärt, kommt weiterhin erst in v1.8 — die Sandboxes landen absichtlich zuerst, damit du die Ideen ausprobieren kannst, bevor die Szenarien sie erzählen.
Aufbauend auf der Replikation
Dieses Pack setzt direkt auf v1.3 auf. Eine Transaktion ist eine Haltbarkeitsgarantie mit zusätzlicher Atomarität, deshalb bleiben ISR und High Watermark, die du dort zu lesen gelernt hast, auch hier die Grundwahrheit — der LSO ist schlicht eine strengere Obergrenze darüber.
Öffne den Simulator, starte eine Transaktion, produziere hinein und brich sie ab — und sieh dann, was ein read_committed-Consumer sieht und was nicht.