Junior — Middle
როგორ ხდება შეტყობინებების მინიმუმ ერთხელ მიწოდების შესაძლებლობის უზრუნველყოფა Kafka-ში?
sobes.tech AI
პასუხი AI-სგან
Apache Kafka-ში შეტყობინებების მიწოდება "მინიმუმ ერთხელ" გარანტირებულია დადასტურებების (acknowledgments) და ऑफსეტების (offsets) მართვის მექანიზმის საშუალებით.
პროცესი ასე გამოიყურება:
- პროდიუსერი აგზავნის შეტყობინებას Kafka-ს და ელოდება ბროკერის დადასტურებას (მაგ., ack=all — ყველა რეპლიკის დადასტურება).
- შეტყობინება ინახება ბროკერის ლოგში.
- მომხმარებელი კითხულობს შეტყობინებას და წარმატებული დამუშავების შემდეგ აგზავნის დადასტურებას (commit) offsets-ის (offsets) Kafka-ს.
თუ მომხმარებელი ჩამოიშლება დადასტურებამდე, მას შემდეგ, რაც ის განახლდება, ის კვლავ წაიკითხავს შეტყობინებას, რაც უზრუნველყოფს "მინიმუმ ერთხელ" მიწოდებას.
მაგალითი Go-ში, sarama ბიბლიოთეკის გამოყენებით:
consumer, err := sarama.NewConsumerGroup(brokers, groupID, config)
// ...
// შეტყობინებების დამუშავების დროს:
func (h *handler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
for message := range claim.Messages() {
process(message) // შეტყობინების დამუშავება
sess.MarkMessage(message, "") // დამუშავების დადასტურება
}
return nil
}
თუ დადასტურება არ გაიგზავნება, შეტყობინება კვლავ მიეწოდება.