Junior — Middle
Kako se obezbeđuje mogućnost dostavljanja poruka najmanje jednom u Kafka?
sobes.tech АИ
Одговор од АИ
U Apache Kafka, isporuka poruka sa garancijom "najmanje jednom" obezbeđena je putem mehanizma potvrda (acknowledgments) i upravljanja ofsetima (offsets).
Proces izgleda ovako:
- Producent šalje poruku u Kafka i čeka potvrdu od brokera (npr., ack=all — potvrda od svih replika).
- Poruka se čuva u dnevniku (logovima) brokera.
- Potrošač čita poruku i nakon uspešne obrade šalje potvrdu (commit) ofseta (offset) u Kafka.
Ako potrošač padne pre potvrde, pri ponovnom pokretanju pročitaće poruku ponovo, čime se obezbeđuje isporuka "najmanje jednom".
Primer u Go sa bibliotekom sarama:
consumer, err := sarama.NewConsumerGroup(brokers, groupID, config)
// ...
// U rukovaocu porukama:
func (h *handler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
for message := range claim.Messages() {
process(message) // obrada poruke
sess.MarkMessage(message, "") // potvrda obrade
}
return nil
}
Dakle, ako potvrda nije poslata, poruka će biti dostavljena ponovo.