Sobes.tech
Junior — Middle

Ako je zabezpečená možnosť doručenia správ najmenej raz v Kafka?

sobes.tech AI

Odpoveď od AI

V Apache Kafka je doručivanje sporočil z zagotovilom "vsaj enkrat" zagotovljeno z mehanizmom potrditev (acknowledgments) in upravljanjem ofsetov (offsets).

Proces izgleda tako:

  1. Proizvajalec pošlje sporočilo v Kafka in čaka na potrditev od strežnika (npr., ack=all — potrditev vseh replikacij).
  2. Sporočilo se shrani v dnevnik (log) strežnika.
  3. Potrošnik prebere sporočilo in po uspešnem obdelovanju pošlje potrditev (commit) ofseta v Kafka.

Če potrošnik pade pred potrdilom, bo ob ponovnem zagonu spet prebral sporočilo, kar zagotavlja dostavo "vsaj enkrat".

Primer v Go z uporabo knjižnice sarama:

consumer, err := sarama.NewConsumerGroup(brokers, groupID, config)
// ...
// V obdelovalcu sporočil:
func (h *handler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
    for message := range claim.Messages() {
        process(message) // obdelava sporočila
        sess.MarkMessage(message, "") // potrditev obdelave
    }
    return nil
}

Če potrdilo ni poslano, bo sporočilo ponovno dostavljeno.