KRaft in Kafka 4.0: Goodbye ZooKeeper, Quorum Controller and Migration
Kafka 4.0 (březen 2025) trvale odstranil ZooKeeper po třech letech soužití s KRaft. Tento podrobný průvodce vysvětluje, jak funguje nový řadič kvora založený na Raftu, Path povinné migrace pro ty, kteří přicházejí z Kafka 3.x, skutečné provozní výhody a úskalí je třeba se vyhnout při přechodu do výroby.
Problém se ZooKeeperem
Téměř deset let vyžaduje každý klastr Apache Kafka soubor Apache ZooKeeper samostatné pro správu metadat: kteří makléři byli aktivní, který makléř byl vedoucím kterého oddílu, tématu a metadat ACL. ZooKeeper je koordinační systém distribuovaný robustní a spolehlivý, ale přinesl řadu významných provozních problémů:
- Dvojitá provozní složitost: Každý tým spravující Kafku musel také spravovat samostatný cluster ZooKeeper (typicky 3 nebo 5 uzlů), s vlastním monitorováním, cyklem upgradu a odlišnou konfigurací.
- Omezená škálovatelnost metadat: ZooKeeper vykázal snížení výkonu nad ~200 000 oddílů na cluster, protože metadata každého oddílu byla zapsána jako samostatné uzly ZooKeeper.
- Pomalá volba kontrolora: Když Kafka broker controller spadl, nový controller musel přečíst celé číslo stav clusteru ze ZooKeeperu, než mohl fungovat, což je proces, který může u velkých clusterů trvat desítky sekund.
- Obtížnost při obnově po havárii: obnovení clusteru Kafka v případě ztráty dat na ZooKeeper byl to složitý a riskantní manuální proces.
Časová osa KRraft
- KIP-500 (2020): Původní návrh na odstranění ZooKeepera z Kafky
- Kafka 2.8 (duben 2021): první verze s KRaft v předběžném přístupu (pouze pro testování)
- Kafka 3.3 (říjen 2022): KRaft prohlásil, že je připraven na výrobu pro nové clustery
- Kafka 3.5 (červen 2023): K dispozici je nástroj pro migraci ZooKeeper na KRaft
- Kafka 3.7 (březen 2024): Podpora režimu ZooKeeper byla ukončena
- Kafka 4.0 (březen 2025): Režim ZooKeeper byl trvale odstraněn
Jak KRaft funguje: The Raft Consensus Log
Koncept protokolu metadat
Řešení přijaté v KRaft (Kafka Raft) je elegantní: namísto závislosti na externím systému pro metadata,
Kafka nakládá se svými metadaty jako a Vnitřní kafkovské téma volal @metadata.
Toto téma je replikováno prostřednictvím protokolu Raft mezi řídicími uzly.
V KRaft přebírají cluster brokeři jednu ze dvou rolí (nebo obě v malých clusterech):
- Ovladače: Spravuje metadata clusteru. V produkčním clusteru se doporučuje kvorum 3 řadičů. Aktivní kontrolor (vůdce raftu) zpracovává všechny změny metadat a replikuje je na jiné kontrolory.
- Makléř: spravuje logy oddílů, slouží výrobcům a spotřebitelům. Makléři si ponechávají kopii mezipaměť metadat přijatých z ovladače, aktualizovaná ve streamování.
Raftový protokol v Kafkovi
Raft je distribuovaný konsensus algoritmus navržený tak, aby byl srozumitelný (na rozdíl od Paxosu). Stručně řečeno: ze všech uzlů kvora je zvolen jeden vůdce. Vedoucí přijímá všechna písma, rozšíří je mezi následovníky, a když většina uzlů zápis potvrdí, považuje to za potvrzené.
V KRaft se to překládá takto:
- Operace metadat (vytvoření tématu, přiřazení vedoucího oddílu atd.) dorazí do řídicího řadiče
- Vedoucí kontrolér zapíše operaci do protokolu metadat jako serializovanou událost
- Událost je replikována na sledující ovladače prostřednictvím protokolu
FETCH(využití stávajícího Kafkova kódu) - Když většina kontrolorů potvrdí (kvorum), operace je potvrzena
- Brokeři dostávají aktualizace metadat posílané z aktivního správce prostřednictvím
MetadataUpdate
# Struttura di una directory dati KRaft (broker+controller combinato)
# /var/lib/kafka/data/
/var/lib/kafka/data/
meta.properties # cluster.id, node.id, version
__cluster_metadata-0/ # il metadata log (partizione 0)
00000000000000000000.log
00000000000000000000.index
00000000000000000000.timeindex
leader-epoch-checkpoint
ordini-effettuati-0/ # log di una partizione normale
ordini-effettuati-1/
...
# meta.properties esempio:
node.id=1
version=1
cluster.id=MkU3OEVBNTcwNTJENDM2Qk
Kontrolor kvora: Dimenzování
Správce kvora se řídí konsensuálními pravidly: tolerovat f selhání, jsou potřeba 2f+1 uzly.
- 3 ovladače: toleruje 1 selhání (minimální konfigurace pro výrobu)
- 5 ovladačů: toleruje 2 simultánní selhání (doporučeno pro kritické clustery)
- 1 ovladač: Pouze pro místní vývoj/testování, bez tolerance chyb
Ovladače mohou být oddaný (pouze role řadiče, nespravovat uživatelské oddíly) nebo kombinovaný (stejné stroje, které fungují také jako makléři). U malých clusterů (< 10 brokerů) řadiče dohromady jsou fajn. U velkých clusterů nebo clusterů s vysokou propustností izolují zátěž správy vyhrazené řadiče metadata z načtení I/O oddílů.
Konfigurace clusteru KRaft od nuly
# server.properties per un nodo controller+broker combinato (cluster single-node per dev)
# ─── Identity ─────────────────────────────────────────────────────────────────
# In KRaft ogni nodo ha un node.id unico nel cluster (sostituisce broker.id)
node.id=1
# Ruoli: "broker" | "controller" | "broker,controller"
process.roles=broker,controller
# Indirizzo del quorum controller: formato node.id@host:port
controller.quorum.voters=1@localhost:9093
# ─── Listeners ────────────────────────────────────────────────────────────────
# KAFKA: listener per producer/consumer
# CONTROLLER: listener per comunicazione KRaft interna
listeners=KAFKA://localhost:9092,CONTROLLER://localhost:9093
advertised.listeners=KAFKA://localhost:9092
listener.security.protocol.map=KAFKA:PLAINTEXT,CONTROLLER:PLAINTEXT
inter.broker.listener.name=KAFKA
controller.listener.names=CONTROLLER
# ─── Storage ──────────────────────────────────────────────────────────────────
log.dirs=/var/lib/kafka/data
# ─── Replication defaults ─────────────────────────────────────────────────────
default.replication.factor=1 # 1 per dev, 3 per produzione
min.insync.replicas=1 # 1 per dev, 2 per produzione
offsets.topic.replication.factor=1
# ─── Retention ────────────────────────────────────────────────────────────────
log.retention.hours=168 # 7 giorni
log.segment.bytes=1073741824 # 1GB per segmento
# Inizializzare il cluster KRaft (una tantum)
# Step 1: generare un cluster UUID univoco
KAFKA_CLUSTER_ID=$(kafka-storage.sh random-uuid)
echo "Cluster ID: $KAFKA_CLUSTER_ID"
# Step 2: formattare la directory storage con il cluster ID
kafka-storage.sh format \
--config /etc/kafka/server.properties \
--cluster-id "$KAFKA_CLUSTER_ID"
# Output:
# Formatting /var/lib/kafka/data with metadata.version 4.0-IV3.
# Step 3: avviare il broker
kafka-server-start.sh /etc/kafka/server.properties
Důležité: ID clusteru je neměnné
Il cluster.id generované při zápisu formátu do souboru meta.properties každého uzlu
a v protokolu metadat. Po inicializaci jej nelze změnit. Pokud tento soubor ztratíte a chcete přidat uzel
do existujícího clusteru, musíte použít příslušnou bootstrap proceduru. Uložte ID clusteru v systému správy tajných klíčů.
Docker Compose: KRaft Cluster pro místní rozvoj
# docker-compose.yml per cluster Kafka 4.0 KRaft (3 broker)
# Immagine: apache/kafka:4.0.0 (immagine ufficiale Apache, non Confluent)
version: "3.9"
services:
kafka1:
image: apache/kafka:4.0.0
container_name: kafka1
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: "broker,controller"
KAFKA_LISTENERS: "PLAINTEXT://kafka1:9092,CONTROLLER://kafka1:9093"
KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka1:9092"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT"
KAFKA_CONTROLLER_LISTENER_NAMES: "CONTROLLER"
KAFKA_CONTROLLER_QUORUM_VOTERS: "1@kafka1:9093,2@kafka2:9093,3@kafka3:9093"
KAFKA_INTER_BROKER_LISTENER_NAME: "PLAINTEXT"
KAFKA_DEFAULT_REPLICATION_FACTOR: 3
KAFKA_MIN_INSYNC_REPLICAS: 2
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
CLUSTER_ID: "MkU3OEVBNTcwNTJENDM2Qk"
volumes:
- kafka1-data:/var/lib/kafka/data
kafka2:
image: apache/kafka:4.0.0
container_name: kafka2
environment:
KAFKA_NODE_ID: 2
KAFKA_PROCESS_ROLES: "broker,controller"
KAFKA_LISTENERS: "PLAINTEXT://kafka2:9092,CONTROLLER://kafka2:9093"
KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka2:9092"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT"
KAFKA_CONTROLLER_LISTENER_NAMES: "CONTROLLER"
KAFKA_CONTROLLER_QUORUM_VOTERS: "1@kafka1:9093,2@kafka2:9093,3@kafka3:9093"
KAFKA_INTER_BROKER_LISTENER_NAME: "PLAINTEXT"
KAFKA_DEFAULT_REPLICATION_FACTOR: 3
KAFKA_MIN_INSYNC_REPLICAS: 2
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
CLUSTER_ID: "MkU3OEVBNTcwNTJENDM2Qk"
volumes:
- kafka2-data:/var/lib/kafka/data
kafka3:
image: apache/kafka:4.0.0
container_name: kafka3
environment:
KAFKA_NODE_ID: 3
KAFKA_PROCESS_ROLES: "broker,controller"
KAFKA_LISTENERS: "PLAINTEXT://kafka3:9092,CONTROLLER://kafka3:9093"
KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka3:9092"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT"
KAFKA_CONTROLLER_LISTENER_NAMES: "CONTROLLER"
KAFKA_CONTROLLER_QUORUM_VOTERS: "1@kafka1:9093,2@kafka2:9093,3@kafka3:9093"
KAFKA_INTER_BROKER_LISTENER_NAME: "PLAINTEXT"
KAFKA_DEFAULT_REPLICATION_FACTOR: 3
KAFKA_MIN_INSYNC_REPLICAS: 2
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
CLUSTER_ID: "MkU3OEVBNTcwNTJENDM2Qk"
volumes:
- kafka3-data:/var/lib/kafka/data
volumes:
kafka1-data:
kafka2-data:
kafka3-data:
Migrace z Kafka 3.x pomocí ZooKeeper na KRaft
Pokud spravujete cluster Kafka 3.x v režimu ZooKeeper a potřebujete migrovat na KRaft (vyžadováno pro použití Kafka 4.0), proces se nazývá Migrace KRraftů a je oficiálně podporován od verze 3.5. Dobrá zpráva: Migrace probíhá bez prostojů pro výrobce a spotřebitele.
Fáze migrace
Oficiální proces je rozdělen do 6 fází:
-
Zkontrolujte předpoklady: upgrade na Kafka 3.7 (nejnovější verze s podporou duálního zápisu ZooKeeper+KRaft),
zkontrolujte, zda mají všichni makléři
metadata.versionzarovnané. - Nasazení ovladače KRraft: Spusťte uzly ovladače KRaft (3 nové uzly nebo stávající brokery s další role). Kontroloři získávají počáteční metadata od ZooKeeper prostřednictvím nástroje pro migraci.
- Režim duálního zápisu: Brokeři zapisují metadata do protokolu metadat ZooKeeper i KRaft. Během této fáze je systém plně funkční.
- Migrace dokončena: všichni brokeři migrují, ZooKeeper se pro Kafku stává pouze pro čtení. Výrobci ani spotřebitelé žádné přerušení nevnímají.
- Finalizátor ZooKeeper: Spusťte finalizátor, který vyčistí metadata Kafka ze ZooKeeperu.
- Vypnutí ZooKeeper: Vyřaďte soubor ZooKeeper z provozu. Plně KRraft cluster.
# Step 1: Verifica metadata.version attuale del cluster
# (da eseguire con Kafka 3.7)
kafka-features.sh --bootstrap-server kafka1:9092 describe
# Output:
# Feature: metadata.version
# SupportedMinVersion: 3.0-IV1
# SupportedMaxVersion: 3.7-IV4
# FinalizedVersion: 3.7-IV4
# Step 2: Avvia i controller KRaft con la migration config speciale
# In server.properties dei controller KRaft:
process.roles=controller
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181 # ancora necessario in fase di migrazione
controller.quorum.voters=10@kc1:9093,11@kc2:9093,12@kc3:9093
# Step 3: Avvia la migration (da eseguire una volta soli i controller KRaft sono up)
# Modifica server.properties di OGNI broker Kafka esistente:
# Aggiunge il parametro:
zookeeper.metadata.migration.enable=true
controller.quorum.voters=10@kc1:9093,11@kc2:9093,12@kc3:9093
# Riavvia i broker uno alla volta (rolling restart, zero downtime)
# I broker entrano in migration mode automaticamente
# Step 4: Monitora lo stato della migrazione
kafka-metadata-shell.sh \
--snapshot /var/lib/kafka/data/__cluster_metadata-0/00000000000000000000.snapshot
# Step 5: Finalizza (dopo che tutti i broker sono migrati)
kafka-features.sh --bootstrap-server kafka1:9092 upgrade \
--metadata 3.7-IV4 # o la versione target
# Step 6: Rimuovi zookeeper.connect dai server.properties e riavvia i broker
Důležitá upozornění pro migraci
- Nevracejte se snadno: Jakmile je migrace KRaft dokončena a ZooKeeper je odstraněn, rollback je velmi složitý. Nejprve migrujte do pracovního prostředí identického s produkčním prostředím.
- ACL a konfigurace: ACL a dynamické konfigurace spravované přes ZooKeeper jsou migrovány automaticky v protokolu metadat, ale zkontrolujte, zda jsou po migraci přítomny.
- Konektor Kafka Connect: Konektory, které používají cluster Kafka jako backend pro stav (group.id, offsety) nadále fungovat beze změny.
- MirrorMaker 2: Pokud používáte MM2 pro geografickou replikaci, aktualizujte vzdálené clustery v tomtéž okno údržby, aby se předešlo nekompatibilitě verzí.
KRaft s pokročilou konfigurací: Vyhrazené ovladače
Pro clustery s vysokou propustností nebo správou velkého počtu oddílů (>50 000) je vhodné oddělit controllery od brokerů (dedicated controllers). Takhle operace s metadaty (vytvoření tématu, volba lídra, změna konfigurace) nesoutěží s logem oddílu I/O na stejných discích.
# server.properties per un CONTROLLER DEDICATO (non gestisce partizioni utente)
node.id=10
process.roles=controller
controller.quorum.voters=10@kc1:9093,11@kc2:9093,12@kc3:9093
listeners=CONTROLLER://kc1:9093
listener.security.protocol.map=CONTROLLER:PLAINTEXT
controller.listener.names=CONTROLLER
log.dirs=/var/lib/kafka/metadata
# server.properties per un BROKER PURO (non è controller)
node.id=1
process.roles=broker
controller.quorum.voters=10@kc1:9093,11@kc2:9093,12@kc3:9093
listeners=KAFKA://kafka1:9092
advertised.listeners=KAFKA://kafka1:9092
listener.security.protocol.map=KAFKA:PLAINTEXT
inter.broker.listener.name=KAFKA
controller.listener.names=CONTROLLER
log.dirs=/var/lib/kafka/data
# Con questa configurazione:
# - 3 macchine controller dedicati (leggeri, poca RAM, poca CPU)
# - N broker puri (ottimizzati per I/O disco)
# - Nessuna competizione di risorse tra metadata ops e I/O partizioni
V Confluent Cloud a ve spravovaných prostředích, jako je Amazon MSK (který přijal KRaft od verze 3.6), k oddělení správce/zprostředkovatele dochází automaticky a je pro uživatele transparentní.
Provozní výhody KRraft
Rychlejší spouštění a obnova
Se ZooKeeperem, když se řadič zprostředkovatele Kafka restartoval, musel přečíst celý stav clusteru od ZooKeeper, než budete moci pracovat. U clusterů s více než 100 000 oddíly to může trvat 30-90 sekund nedostupnost ovladače.
S KRaft vedoucí řadič uchovává protokol metadat již v paměti a na místním disku. A failover ovladač obvykle vyžaduje méně než 5 sekundi pro velké shluky. Případová studie fintech společnosti (Confluent Engineering Blog, 2025) dokumentuje 40% zkrácení doby nastavení po migraci na KRaft.
Škálovatelnost metadat
ZooKeeper měl praktický limit kolem 200 000 oddílů na cluster (bez ohledu na výkon operace s metadaty výrazně degradovány). KRaft zpracovává protokol metadat jako normálně Kulatina Kafka se zhutněním a byla testována s miliony oddílů na shluk.
Provozní jednoduchost
Odstranění ZooKeeper znamená:
- Jeden systém k monitorování místo dvou
- Jeden cyklus upgradu místo dvou (často měli ZooKeeper a Kafka složitá omezení verze)
- Jednodušší nasazení na Kubernetes (méně StatefulSet, méně PVC)
- Snazší zotavení po havárii (stav clusteru je v protokolu metadat, není distribuován mezi Kafka a ZooKeeper)
KRaft na Kubernetes se Strimzi
Strimzi je nejoblíbenějším operátorem Kubernetes pro správu Kafky. Od verze 0.38, Strimzi nativně podporuje KRaft:
# Kafka cluster KRaft con Strimzi Operator (Kubernetes)
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
namespace: kafka
annotations:
# Abilita KRaft mode (richiede Strimzi 0.38+)
strimzi.io/kraft: enabled
spec:
kafka:
version: 4.0.0
replicas: 3
listeners:
- name: plain
port: 9092
type: internal
tls: false
- name: tls
port: 9093
type: internal
tls: true
config:
# KRaft-specific
default.replication.factor: 3
min.insync.replicas: 2
offsets.topic.replication.factor: 3
transaction.state.log.replication.factor: 3
transaction.state.log.min.isr: 2
# Retention
log.retention.hours: 168
log.segment.bytes: 1073741824
storage:
type: persistent-claim
size: 100Gi
class: fast-ssd
# Controller separato (produzione: controller dedicati)
# Ometti questa sezione per controller combinati (default)
# entityOperator gestisce topic e utenti tramite CRD
entityOperator:
topicOperator: {}
userOperator: {}
# Creare un topic con Strimzi CRD (invece di kafka-topics.sh)
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: ordini-effettuati
namespace: kafka
labels:
strimzi.io/cluster: my-cluster
spec:
partitions: 6
replicas: 3
config:
retention.ms: "604800000"
min.insync.replicas: "2"
compression.type: snappy
Kontrola stavu KRaft Clusteru
# Verificare chi è il controller leader attuale
kafka-metadata-quorum.sh \
--bootstrap-server kafka1:9092 \
describe --status
# Output:
# ClusterId: MkU3OEVBNTcwNTJENDM2Qk
# LeaderId: 1
# LeaderEpoch: 42
# HighWatermark: 156789
# MaxFollowerLag: 0
# MaxFollowerLagTimeMs: 12
# CurrentVoters: [{"nodeId":1,"logEndOffset":156789,"lag":0},
# {"nodeId":2,"logEndOffset":156789,"lag":0},
# {"nodeId":3,"logEndOffset":156789,"lag":0}]
# CurrentObservers: []
# Verificare i dettagli del quorum
kafka-metadata-quorum.sh \
--bootstrap-server kafka1:9092 \
describe --replication
# Leggere il metadata log (per debugging)
kafka-dump-log.sh \
--files /var/lib/kafka/data/__cluster_metadata-0/00000000000000000000.log \
--cluster-metadata
Konfigurační rozdíly: ZooKeeper vs KRaft
Pro ty, kteří přicházejí z clusteru ZooKeeper, jsou zde hlavní rozdíly v konfiguraci, které je třeba znát:
| Konfigurace | ZooKeeperMode | KRaftMode |
|---|---|---|
| Spojení clusteru | zookeeper.connect |
controller.quorum.voters |
| ID uzlu | broker.id |
node.id |
| Role | Vždy makléř | process.roles |
| Ovladače posluchačů | N/A | controller.listener.names |
| Inicializace | Auto (kliky ZK) | kafka-storage.sh format |
| ACL úložiště | Znody ZooKeeper | Protokol metadat |
Příznaky verze metadat a funkcí v KRaft
S KRaft zavádí Kafka koncept metadata.verze: Verze formátu metadat v klastru. To umožňuje postupné upgrady clusteru bez prostojů, jeden uzel po druhém. Verze metadat se aktualizuje pouze tehdy, když všichni brokeři v clusteru novou verzi podporují.
# Verificare la metadata.version corrente e le versioni supportate
kafka-features.sh \
--bootstrap-server kafka1:9092 \
describe
# Output tipico con Kafka 4.0:
# Feature: metadata.version
# SupportedMinVersion: 3.0-IV1
# SupportedMaxVersion: 4.0-IV3
# FinalizedVersion: 4.0-IV3
# Verificare tutti i feature flags disponibili
kafka-features.sh \
--bootstrap-server kafka1:9092 \
describe --all
# Aggiornare la metadata.version dopo un upgrade di cluster
# (eseguire DOPO che tutti i broker sono stati aggiornati alla nuova versione)
kafka-features.sh \
--bootstrap-server kafka1:9092 \
upgrade --metadata 4.0-IV3
Verze 4.0-IV3 (Kafka 4.0 Incremental Version 3) je nejnovější dostupná ve vydání
Kafka 4.0 březen 2025. Každé zvýšení verze umožňuje nové funkce a optimalizace protokolů.
Odstraňování problémů KRaft: Běžné problémy
Cluster se nespouští: „Žádní voliči nebyli v kvoru“
Tato chyba označuje, že uzly řadiče nemohou najít jiné voliče kvora. Běžné příčiny:
-
špatně nastavený kontrolor.kvórum.voliče: Ověřte, zda je formát správný
(
nodeId@hostname:port) a že názvy hostitelů jsou rozlišitelné všemi uzly. - Posluchač CONTROLLER je nedostupný: Ověřte, že firewall umožňuje komunikace na portu naslouchacího zařízení řadiče (výchozí: 9093) mezi uzly řadiče.
-
Neshoda ID clusteru: pokud jste restartovali pomocí
kafka-storage.sh formatna jednom z uzlů bez použití správného ID clusteru se uzly ke clusteru nepřipojí.
# Verificare il cluster ID su ogni nodo
cat /var/lib/kafka/data/meta.properties
# node.id=1
# version=1
# cluster.id=MkU3OEVBNTcwNTJENDM2Qk <-- deve essere identico su tutti i nodi
# Verificare che il controller leader sia eletto
kafka-metadata-quorum.sh \
--bootstrap-server kafka1:9092 \
describe --status | grep LeaderId
# Se LeaderId=-1, nessun leader è stato eletto (quorum non raggiunto)
# Controllare i log del broker per errori KRaft
grep -E "WARN|ERROR" /var/log/kafka/kafka.log | grep -i "kraft\|quorum\|controller"
Broker nebyl přidán do clusteru
Když přidáte nového zprostředkovatele do existujícího clusteru KRaft, zprostředkovatel musí být naformátován se stejným ID clusteru jako stávající cluster:
# Recupera il cluster ID dal cluster esistente
CLUSTER_ID=$(kafka-metadata-quorum.sh \
--bootstrap-server kafka1:9092 \
describe --status | grep ClusterId | awk '{print $2}')
echo "Cluster ID: $CLUSTER_ID"
# Formatta il nuovo broker con lo stesso cluster ID
kafka-storage.sh format \
--config /etc/kafka/server.properties \
--cluster-id "$CLUSTER_ID"
# Avvia il nuovo broker
kafka-server-start.sh /etc/kafka/server.properties
# Verifica che il nuovo broker sia visibile nel cluster
kafka-broker-api-versions.sh \
--bootstrap-server kafka1:9092 | grep "id:"
Další kroky v sérii
Se součástí KRaft jste připraveni řešit pokročilejší aspekty konfigurace Kafka:
-
Článek 3 – Pokročilý výrobce a spotřebitel: podrobná konfigurace
acks,idempotent producera zopakujte strategie, abyste zajistili trvanlivost bez duplikátů. - Článek 4 – Sémantika přesně jednou: Transakce Kafka pro atomické zápisy na více témat, s novým transakčním koordinátorem implementovaným v protokolu metadat KRaft.
- Článek 11 – Kafka ve výrobě: KRaft cluster dimenzování, konfigurace replik řadičů, zotavení po havárii a zálohování protokolu metadat.
Propojení s ostatními sériemi
- Pokročilý Kubernetes: nasazení Kafky na Kubernetes s operátorem Strimzi, správa trvalého úložiště a automatické škálování skupiny spotřebitelů.
-
Pozorovatelnost: Monitorování kvora KRaft pomocí nástroje JMX Exporter, kritické metriky
jak
kafka.controller:type=KafkaController,name=ActiveControllerCounta upozornění na volbu vůdce.







