Sobes.tech
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:

  1. Producent odešle zprávu do Kafka a čeká na potvrzení od brokeru (například ack=all — potvrzení od všech replik).
  2. Zpráva je uložena v logu brokeru.
  3. 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.