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:
- Proizvajalec pošlje sporočilo v Kafka in čaka na potrditev od strežnika (npr., ack=all — potrditev vseh replikacij).
- Sporočilo se shrani v dnevnik (log) strežnika.
- 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.