Junior — Middle
Cum se asigură posibilitatea de a livra mesajele cel puțin o dată în Kafka?
sobes.tech AI
Răspuns de la AI
În Apache Kafka, livrarea mesajelor cu garanția "cel puțin o dată" este asigurată prin mecanismul de confirmări (acknowledgments) și gestionarea offseturilor (offsets).
Procesul arată astfel:
- Producătorul trimite un mesaj către Kafka și așteaptă confirmarea de la broker (de exemplu, ack=all — confirmarea de la toate replicile).
- Mesajul este salvat în jurnalul (logurile) brokerului.
- Consumatorul citește mesajul și, după o procesare reușită, trimite o confirmare (commit) a offsetului (offset) către Kafka.
Dacă consumatorul cade înainte de a confirma, la repornire va citi mesajul din nou, asigurând livrarea "cel puțin o dată".
Exemplu în Go folosind biblioteca sarama:
consumer, err := sarama.NewConsumerGroup(brokers, groupID, config)
// ...
// În handler-ul de mesaje:
func (h *handler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
for message := range claim.Messages() {
process(message) // procesarea mesajului
sess.MarkMessage(message, "") // confirmarea procesării
}
return nil
}
Prin urmare, dacă confirmarea nu este trimisă, mesajul va fi livrat din nou.