Due pack escono insieme: v1.5 — Storage e ciclo di vita e v1.6 — Operatività, controller e quote. Insieme portano al Kafka Simulator 19 nuovi scenari, il programma arriva a 74 su 122, e il free play chiude la scala di forme di cluster iniziata nella v1.3.
Questa volta partiamo dal free play, perché sono questi due sblocchi quelli più richiesti.
Free play: la scala delle topologie è completa
Dalla v1.3 la sandbox cresceva di una forma di cluster per pack: prima attivo/passivo, poi attivo/attivo. Entrambi sono due cluster uniti da un mirror asincrono. Le due forme che arrivano ora sono di un altro tipo: un solo cluster stirato tra datacenter, dove la replica è sincrona e l’ISR stesso attraversa la WAN.
La differenza si vede nel momento in cui qualcosa si rompe:
- In una coppia mirrorata, perdere una regione è un failover: promuovi l’altro lato e accetti ciò che il mirror non aveva ancora copiato.
- In un cluster stirato, perdere un DC è un evento di replica: l’ISR si restringe, e se puoi ancora scrivere dipende solo da
min.insync.replicas.
3-DC stirato (novità nella v1.5)
Tre datacenter, un cluster. La sandbox predefinita ti dà un broker e un controller in ciascuno di dc-a, dc-b e dc-c, con i broker interlacciati così che il posizionamento round-robin distribuisca le repliche di ogni partizione su tutti e tre i siti. Tre partizioni, quindi ogni DC apre con un leader naturale, così il layout mostra una leadership bilanciata tra DC invece di una partizione solitaria.
C’è un quorum KRaft distribuito sui tre siti, non uno per regione. Uccidi un DC e perdi un votante su tre; i due rimanenti formano ancora una maggioranza e il cluster continua a decidere.
2,5-DC stirato (novità nella v1.6)
L’ultimo gradino: due datacenter con dati più un terzo sito testimone che detiene un voto di controller e nessun dato.
È la forma MRC di Confluent. Ogni DC dati riceve 2 repliche sincrone e 1 observer — RF 4 sull’insieme sincrono, con min.insync.replicas a 3. Due cose sugli observer:
- Non contano per l’ISR, quindi non trattengono una scrittura
acks=all. Una replica attraverso la WAN che facesse da gate a ogni commit sarebbe un disastro di latenza; un observer è il modo di tenere una copia remota senza pagarla sul percorso di scrittura. - Quando l’ISR scende sotto
min.insync.replicas, un observer può essere promosso automaticamente per ripristinare la durabilità. Di default la sandbox promuove al calo dell’ISR e retrocede di nuovo quando il DC si riprende; può anche restare promosso, oppure spegni l’automatismo e lo fai a mano.
Il testimone si sposa direttamente con gli scenari di controller di questa release. Un quorum vuole un numero dispari di votanti, e comprare un terzo datacenter intero per ottenerlo è costoso — così ne compri mezzo. Lo scenario 06.0.2 («quorum KRaft») finisce esattamente sul guasto che il testimone serve a impedire; ora puoi costruire entrambe le configurazioni nella sandbox e confrontarle.
Con questo, tutte e cinque le forme di cluster sono disponibili: DC singolo, attivo/passivo, attivo/attivo, 3-DC stirato e 2,5-DC stirato. Ogni sblocco rimanente del free play — il laboratorio dei guasti nella v1.7, il terminale CLI di Kafka nella v1.8, la governance nella v1.9 — è una nuova capacità, non una nuova forma.
Stessa avvertenza della v1.3: il programma DR che racconta queste topologie arriva ancora nella v1.8. Le forme atterrano prima di proposito, così c’è dove provare le idee prima che gli scenari le spieghino.
Se nel frattempo vuoi leggere di più sulle architetture multi-regione, la guida di SoftwareMill al disaster recovery e alle architetture multi-regione con Apache Kafka è una trattazione approfondita dei compromessi che queste forme racchiudono. Vale la pena tenerla aperta in un’altra scheda mentre giochi con la sandbox.
Gli scenari
v1.5 — Storage e ciclo di vita (9 scenari)
Un log Kafka non è un nastro infinito. Questo modulo copre in tre gruppi cosa succede ai record dopo la scrittura.
Retention — retention.ms e retention.bytes che fanno avanzare il log start offset, e cosa ottiene un consumer che chiede un offset già cancellato dalla retention (OFFSET_OUT_OF_RANGE, e il reset che segue).
Compaction — cleanup.policy=compact che tiene l’ultimo valore per chiave preservando gli offset e lasciando buchi; i tombstone che cancellano una chiave, con delete.retention.ms come finestra di grazia in cui un consumer può osservare la cancellazione prima che venga purgata; e compact,delete che fa girare entrambe le policy insieme.
Tiered storage — scaricare un prefisso invecchiato del log sul tier remoto, rileggerlo, e la differenza tra retention locale e totale. È il gruppo che più cambia il dimensionamento di un cluster: la retention locale smette di essere ciò che limita quanto indietro può leggere un consumer.
v1.6 — il control plane (kraft, 4 scenari)
Cosa fa il controller, e cosa si ferma quando non c’è:
- Il lavoro del controller e il quorum KRaft — il controller tiene coerenti i metadati, non i dati. Perdi la maggioranza del quorum e il controller non c’è più: i leader restano dove sono e nulla di nuovo viene deciso finché un votante non torna.
- Failover del controller e recupero dei metadati — un nuovo controller attivo deve raggiungere l’offset di metadati committato prima di poter servire, ed è per questo che le elezioni si congelano un momento dopo un failover.
- ZooKeeper contro KRaft — lo stesso cluster sotto due control plane, fianco a fianco.
v1.6 — operatività (operations, 6 scenari)
Cosa cambia un operatore su un cluster in esercizio, e quanto costa ogni cambiamento:
- Scale out e il rebalance che segue; scale in, drenando un broker prima di rimuoverlo.
- Riassegnazione manuale delle partizioni, e la stessa riassegnazione limitata sotto carico — dove vedi una nuova replica entrare tardi nell’ISR perché hai messo un tetto al suo recupero per proteggere il traffico vivo.
- Modifiche di configurazione a caldo e quote client che strozzano un producer ritardandone le risposte invece di scartare dati.
Cosa arriva dopo
74 scenari su 122, sette pack rilasciati e una sandbox free play che ora sa modellare ogni forma di cluster a cui il resto del programma farà riferimento. Poi arriva la v1.7 con il laboratorio dei guasti: iniettare kill di broker e partizioni di rete in una qualsiasi di quelle cinque forme, a richiesta.
Apri il simulatore, avvia una sandbox 2,5-DC e uccidi un DC dati, poi guarda un observer venire promosso per tenerti sopra min.insync.replicas.