---
title: "Symulator Kafki v1.5 + v1.6 — klastry rozciągnięte, storage i operacje"
date: 2026-09-02T00:00:00.000Z
author: "michal"
excerpt: "Dwie paczki naraz. Free play domyka drabinę topologii klastrami rozciągniętymi 3-DC i 2,5-DC z witnessem, a 19 nowych scenariuszy pokrywa cykl życia logu — retencję, kompakcję, tiered storage — oraz warstwę sterowania KRaft i operacje wykonywane na żywym klastrze."
---
Dwie paczki wychodzą razem: **v1.5 — Storage i cykl życia** oraz **v1.6 — Operacje, kontroler i quoty**. Razem dokładają do [Symulatora Kafki](/kafka-simulator/) **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](https://softwaremill.com/guide-to-apache-kafka-disaster-recovery-and-multi-region-architectures/) 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](/kafka-simulator/), 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`.