Dwie paczki wychodzą razem: v1.5 — Storage i cykl życia oraz v1.6 — Operacje, kontroler i quoty. Razem dokładają do Symulatora Kafki 19 nowych scenariuszy, program sięga 74 ze 122, a free play kończy drabinę kształtów klastra rozpoczętą w v1.3.

Tym razem zaczynamy od free play, bo to o te dwa odblokowania pytaliście najczęściej.

Free play: drabina topologii domknięta

Od v1.3 piaskownica rosła o jeden kształt klastra na paczkę: najpierw active/passive, potem active/active. Oba to dwa klastry połączone asynchronicznym mirrorem. Kształty, które pojawiają się teraz, są innego rodzaju: jeden klaster rozciągnięty między centrami danych, gdzie replikacja jest synchroniczna, a sam ISR rozciąga się przez WAN.

Różnica wychodzi w chwili, gdy coś padnie:

  • W parze mirrorowanej utrata regionu to failover: promujesz drugą stronę i godzisz się z tym, czego mirror nie zdążył skopiować.
  • W klastrze rozciągniętym utrata DC to zdarzenie replikacyjne: ISR się kurczy, a to, czy nadal możesz pisać, zależy wyłącznie od min.insync.replicas.

3-DC stretched (nowość w v1.5)

Trzy centra danych, jeden klaster. Domyślna piaskownica daje broker i kontroler w każdym z dc-a, dc-b i dc-c, przy czym brokery są przeplatane, więc rozmieszczenie round-robin rozrzuca repliki każdej partycji po wszystkich trzech lokalizacjach. Trzy partycje, więc każde DC startuje z naturalnym liderem, więc układ pokazuje zrównoważone przywództwo między DC, a nie jedną samotną partycję.

Jest tu jedno kworum KRaft rozłożone na trzy lokalizacje, a nie po jednym na region. Ubij DC, a stracisz jednego wyborcę z trzech; pozostała dwójka wciąż tworzy większość i klaster nadal podejmuje decyzje.

2,5-DC stretched (nowość w v1.6)

Ostatni szczebel: dwa centra z danymi plus trzecia lokalizacja witness, która trzyma głos w kworum i nie trzyma żadnych danych.

To kształt Confluent MRC. Każde DC z danymi dostaje 2 repliki synchroniczne i 1 observera — RF 4 w zbiorze synchronicznym, przy min.insync.replicas równym 3. Dwie rzeczy o observerach:

  • Nie liczą się do ISR, więc nie wstrzymują zapisu z acks=all. Replika przez WAN, która bramkowałaby każdy commit, byłaby katastrofą opóźnień; observer to sposób na zdalną kopię bez płacenia za nią na ścieżce zapisu.
  • Gdy ISR spadnie poniżej min.insync.replicas, observer może zostać automatycznie awansowany do ISR, żeby przywrócić trwałość. Domyślnie piaskownica awansuje przy spadku ISR i degraduje z powrotem, gdy DC wraca; można też zostawić go awansowanym na stałe albo wyłączyć automat i robić to ręcznie.

Witness łączy się wprost ze scenariuszami kontrolera z tego wydania. Kworum lubi nieparzystą liczbę wyborców, a kupowanie trzeciego pełnego centrum danych po to, żeby ją uzyskać, jest drogie — więc kupujesz pół. Scenariusz 06.0.2 („kworum KRaft”) kończy się dokładnie tą awarią, przed którą witness ma chronić; teraz możesz zbudować oba układy w piaskownicy i porównać.

Tym samym wszystkie pięć kształtów klastra jest dostępnych: single DC, active/passive, active/active, 3-DC stretched i 2,5-DC stretched. Każde kolejne odblokowanie free play — laboratorium awarii w v1.7, terminal CLI Kafki w v1.8, governance w v1.9 — to nowa możliwość, a nie nowy kształt.

To samo zastrzeżenie co przy v1.3: autorski program DR, który opowiada o tych topologiach, wciąż ląduje dopiero w v1.8. Kształty pojawiają się wcześniej celowo, żeby było gdzie wypróbować pomysły, zanim scenariusze je wytłumaczą.

Jeśli w międzyczasie chcesz poczytać więcej o architekturach wieloregionowych, przewodnik SoftwareMill po disaster recovery i architekturach multi-region w Apache Kafce to solidne omówienie kompromisów, które te kształty w sobie zawierają. Warto mieć go otwartego w drugiej karcie podczas zabawy z piaskownicą.

Scenariusze

v1.5 — Storage i cykl życia (9 scenariuszy)

Log Kafki nie jest nieskończoną taśmą. Ten moduł pokrywa to, co dzieje się z rekordami po zapisie, w trzech grupach.

Retencjaretention.ms i retention.bytes przesuwające log start offset oraz to, co dostaje konsument, gdy prosi o offset już usunięty przez retencję (OFFSET_OUT_OF_RANGE i następujący po nim reset).

Kompakcjacleanup.policy=compact zachowujące najnowszą wartość na klucz przy zachowaniu offsetów i pozostawieniu dziur; tombstone’y usuwające klucz, z delete.retention.ms jako oknem karencji, w którym konsument może zobaczyć usunięcie, zanim zostanie wyczyszczone; oraz compact,delete uruchamiające obie polityki naraz.

Tiered storage — zrzucanie postarzałego prefiksu logu na zdalną warstwę, odczyt z powrotem i różnica między retencją lokalną a całkowitą. To ta grupa najbardziej zmienia sposób wymiarowania klastra: retencja lokalna przestaje być tym, co ogranicza, jak daleko wstecz może czytać konsument.

v1.6 — warstwa sterowania (kraft, 4 scenariusze)

Za co odpowiada kontroler i co się dzieje, gdy go nie ma:

  • Zadanie kontrolera i kworum KRaft — kontroler pilnuje spójności metadanych, nie danych. Strać większość kworum, a kontrolera nie ma: liderzy zostają tam, gdzie są, i nic nowego nie zostanie zdecydowane, dopóki nie wróci wyborca.
  • Przełączenie kontrolera i nadganianie metadanych — nowy aktywny kontroler musi dojść do zatwierdzonego offsetu metadanych, zanim zacznie obsługiwać, dlatego wybory potrafią na moment zamarznąć po failoverze.
  • ZooKeeper kontra KRaft — ten sam klaster pod dwiema warstwami sterowania, obok siebie.

v1.6 — operacje (operations, 6 scenariuszy)

Co operator zmienia na żywym klastrze i ile każda zmiana kosztuje:

  • Skalowanie w górę i następujący po nim rebalans; skalowanie w dół, z drenowaniem brokera przed usunięciem.
  • Ręczna realokacja partycji i ta sama realokacja dławiona pod obciążeniem — gdzie widać, jak nowa replika dołącza do ISR z opóźnieniem, bo ograniczyliśmy jej tempo nadganiania, żeby chronić ruch produkcyjny.
  • Zmiany konfiguracji na żywo oraz quoty klienckie dławiące producenta przez opóźnianie odpowiedzi zamiast gubienia danych.

Co dalej

74 ze 122 scenariuszy, siedem wydanych paczek i piaskownica free play, która potrafi już zamodelować każdy kształt klastra, do jakiego reszta programu będzie się odwoływać. Dalej v1.7 i laboratorium awarii: wstrzykiwanie ubijania brokerów i podziałów sieci w dowolny z tych pięciu kształtów, na żądanie.

Otwórz symulator, uruchom piaskownicę 2,5-DC i ubij jedno DC z danymi, a potem patrz, jak observer zostaje awansowany, żeby utrzymać cię powyżej min.insync.replicas.