Wydanie v1.4 dodaje do Symulatora Kafki moduł transakcji — 10 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_committedi 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–produce —
sendOffsetsToTransactioni 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.
westjest właścicielemwest.orders,east—east.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.