Junior — Middle
Jak je zajištěna možnost doručení zpráv alespoň jednou v Kafka?
sobes.tech AI
Odpověď od AI
V Apache Kafka je doručování zpráv s garantí "alespoň jednou" zajištěno pomocí mechanismu potvrzení (acknowledgments) a správy offsetů (offsets).
Proces vypadá takto:
- Producent odešle zprávu do Kafka a čeká na potvrzení od brokeru (například ack=all — potvrzení od všech replik).
- Zpráva je uložena v logu brokeru.
- Konzument přečte zprávu a po úspěšném zpracování odešle potvrzení (commit) offsetu do Kafka.
Pokud konzument spadne před potvrzením, při restartu přečte zprávu znovu, což zajišťuje doručení "alespoň jednou".
Příklad v Go s knihovnou sarama:
consumer, err := sarama.NewConsumerGroup(brokers, groupID, config)
// ...
// V obsluze zpráv:
func (h *handler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
for message := range claim.Messages() {
process(message) // zpracování zprávy
sess.MarkMessage(message, "") // potvrzení zpracování
}
return nil
}
Pokud potvrzení není odesláno, zpráva bude doručena znovu.