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.
Retencja — retention.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).
Kompakcja — cleanup.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.