Wydanie v1.4 dodaje do Symulatora Kafki moduł transakcji10 nowych scenariuszy o temacie, przy którym inżynierowie najczęściej kiwają głową ze zrozumieniem, a najrzadziej naprawdę go widzą: o semantyce exactly-once. Program sięga 55 ze 125.

Co jest w v1.4

Transakcje zamieniają strumień zapisów w jednostkę atomową — i zmieniają to, co konsumentowi wolno w ogóle zobaczyć:

  • read_committed i last stable offset (LSO) — dlaczego konsument transakcyjny czyta do LSO, a nie do high watermark, i w jaki sposób otwarta transakcja trzyma ten sufit w miejscu.
  • begin / commit / abort — cykl życia transakcji producenta jako maszyna stanów, którą sam prowadzisz, łącznie z tym, co znacznik abort robi z objętymi nim rekordami.
  • Pętla consume–process–producesendOffsetsToTransaction i dlaczego dopiero commit offsetów wewnątrz transakcji czyni exactly-once od końca do końca realnym.
  • Fencing — jak producent-zombie zostaje odcięty przez epokę i dlaczego to jest siatka bezpieczeństwa pod całym modelem.

Exactly-once trudno się uczy, bo tak wiele w nim pozostaje niewidoczne: znaczniki, LSO, epoki i konsument, który po cichu pomija przerwane rekordy. Symulator kładzie to wszystko na osi czasu — możesz patrzeć, jak LSO stoi w miejscu pod otwartą transakcją i skacze do przodu w chwili, gdy ta się zatwierdza.

Nowy typ klastra we free play: active/active

Drabina topologii, która zaczęła się w v1.3 od active/passive, rośnie dalej: wybór klastra we free play zyskuje trzeci kształt — Active / active: dwa regiony, oba przyjmują zapisy i każdy replikuje do drugiego.

To celowo nie jest „active/passive z podwojoną strzałką”. Ten preset jest symetryczny:

  • Każdy region ma własny temat. west jest właścicielem west.orders, easteast.orders, a każdy z nich jest replikowany tylko do odczytu do drugiego regionu, więc obie strony trzymają cały strumień bez dwuznaczności, kto może pisać pod tą samą nazwą.
  • Każdy region pisze lokalnie, a czyta globalnie. Producent dopisuje wyłącznie do tematu własnego regionu; grupa konsumentów każdego regionu czyta zarówno temat lokalny, jak i lustrzaną kopię tego drugiego, więc każdy rekord jest widziany raz na stronę.
  • Każdy region jest osobnym klastrem. Oba prowadzą niezależne kworum KRaft — możesz więc ubić kontrolery jednego regionu (albo cały region) i zobaczyć, co strona, która przetrwała, potrafi, a czego nie.

I właśnie ten ostatni punkt jest wyrazistym kontrastem wobec gwarancji transakcyjnych, których uczy ten pakiet: exactly-once to obietnica w obrębie jednego klastra, a para active/active to dwa klastry. Wszystko, co daje moduł transakcji, obowiązuje wewnątrz jednego regionu i kończy się na mirrorze.

Program DR, który tłumaczy te kształty, nadal pojawi się dopiero w v1.8 — piaskownice lądują najpierw celowo, żeby było gdzie wypróbować te pomysły, zanim scenariusze je opowiedzą.

Nadbudowa nad replikacją

Ten pakiet stoi wprost na v1.3. Transakcja to gwarancja trwałości z dołożoną atomowością, więc ISR i high watermark, poznane tam wcześniej, wciąż są tutaj gruntem — LSO jest po prostu ostrzejszym sufitem ponad nimi.

Otwórz symulator, rozpocznij transakcję, wyprodukuj do niej i przerwij ją — a potem zobacz, co konsument read_committed widzi, a czego nie.