Sobes.tech
Junior — Middle

როგორ ხდება შეტყობინებების მინიმუმ ერთხელ მიწოდების შესაძლებლობის უზრუნველყოფა Kafka-ში?

sobes.tech AI

პასუხი AI-სგან

Apache Kafka-ში შეტყობინებების მიწოდება "მინიმუმ ერთხელ" გარანტირებულია დადასტურებების (acknowledgments) და ऑफსეტების (offsets) მართვის მექანიზმის საშუალებით.

პროცესი ასე გამოიყურება:

  1. პროდიუსერი აგზავნის შეტყობინებას Kafka-ს და ელოდება ბროკერის დადასტურებას (მაგ., ack=all — ყველა რეპლიკის დადასტურება).
  2. შეტყობინება ინახება ბროკერის ლოგში.
  3. მომხმარებელი კითხულობს შეტყობინებას და წარმატებული დამუშავების შემდეგ აგზავნის დადასტურებას (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
}

თუ დადასტურება არ გაიგზავნება, შეტყობინება კვლავ მიეწოდება.