Tag: kafka, message-broker, event-streaming, pub-sub, topics, partitions, consumer-groups
Livello: intermedio
TL;DR: Apache Kafka è una piattaforma di event streaming distribuita. Eccelle nel gestire enormi volumi di dati in tempo reale tramite un modello publish-subscribe basato su log immutabili.
Il cluster è formato da nodi server chiamati Broker.
I messaggi sono categorizzati in Topic, che fungono da logiche code di eventi.
I Topic sono divisi in Partitions per scalare la lettura e scrittura su più Broker.
L'ordinamento dei messaggi è garantito esclusivamente all'interno della singola partizione, non a livello di Topic.
I Producer pubblicano messaggi; i Consumer li sottoscrivono e leggono al proprio ritmo.
Un Consumer Group permette a più Consumer di dividersi il carico di lavoro delle partizioni di un Topic.
L'Offset è l'indice numerico che traccia la posizione di lettura di un Consumer in una specifica partizione.
La Retention Policy definisce per quanto tempo o per quale limite di spazio i messaggi vengono conservati prima di essere scartati.
Zookeeper (o recentemente KRaft) gestisce lo stato del cluster, i metadati e l'elezione dei leader.
Q: Come garantisci che determinati messaggi vengano elaborati in ordine?R: Associo una message key al momento della produzione. Kafka instraderà tutti i messaggi con la stessa chiave nella stessa partizione, mantenendone l'ordine cronologico.
Q: Cosa succede se un nodo Consumer crasha all'interno di un Consumer Group?R: Avviene un rebalance automatico. Il cluster si accorge del timeout e riassegna le partizioni del nodo fallito agli altri Consumer attivi del gruppo.
Q: Qual è la differenza principale tra Kafka e RabbitMQ?R: RabbitMQ si basa su code effimere ed elimina i messaggi dopo la lettura. Kafka salva i dati in un log persistente su disco, permettendo riletture multiple.
Usare l'auto-commit degli offset: se l'elaborazione fallisce dopo il commit automatico, il messaggio viene perso. Eseguo sempre il commit manuale post-elaborazione.
Configurare più Consumer in un gruppo rispetto al numero di Partitions del Topic: i Consumer in eccesso rimarranno inattivi.
Non gestire correttamente i messaggi corrotti ("poison pill"), causando loop infiniti e bloccando l'avanzamento dell'offset sulla partizione.
# Creare un topic con 3 partizioni
kafka-topics.sh --create --topic my-topic --partitions 3 --replication-factor 2 --bootstrap-server localhost:9092
# Produrre messaggi da console
kafka-console-producer.sh --topic my-topic --bootstrap-server localhost:9092
# Consumare messaggi partendo dal primo disponibile (offset 0)
kafka-console-consumer.sh --topic my-topic --from-beginning --bootstrap-server localhost:9092
# Controllare lo stato e il lag di un Consumer Group
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group
[ ] Dettagli sull'architettura KRaft per rimpiazzare Zookeeper
[x] Dinamiche di Rebalancing e partizionamento a livello di Consumer Group