Sobes.tech
Senior

Kafka ilə hansı tapşırıqları yerinə yetirdiniz? Çatdırılma zəmanətlərini (exactly-once) necə tənzimlədiniz?

sobes.tech Süni İntellekt

AI-dan cavab

Kafka adətən mikroxidmətlər arasında etibarlı və miqyaslana bilən mesaj ötürülməsinin təşkili, real vaxt rejimində hadisələrin emalı və yüksək keçirmə qabiliyyətinə malik sistemlərin qurulması vəzifələrini həll etmək üçün istifadə olunur.

Tam olaraq bir dəfə çatdırılma zəmanətini konfiqurasiya etmək üçün aşağıdakı yanaşmalar tətbiq olunmuşdur:

  • Kafka Producer-də tranzaksiyaların dəstəyini aktivləşdirmək, mesajların atomik göndərilməsini təmin etmək.
  • Dublikatların qarşısını almaq üçün idempotent istehsalçıdan (enable.idempotence=true) istifadə etmək.
  • İstifadəçi tərəfində, hər bir mesajın yalnız bir dəfə işlənməsini təmin etmək üçün tranzaksiyalar çərçivəsində offsetlərin saxlanması ilə emal tətbiq etmək.

Sarama kitabxanası ilə Go dilində istehsalçını konfiqurasiya nümunəsi:

config := sarama.NewConfig()
config.Producer.Idempotent = true
config.Producer.RequiredAcks = sarama.WaitForAll
config.Producer.Transaction.ID = "my-transactional-id"

producer, err := sarama.NewSyncProducer(brokers, config)
if err != nil {
    panic(err)
}

// Tranzaksiyanı başlat
producer.BeginTxn()

// Mesajları göndər
producer.SendMessage(&sarama.ProducerMessage{Topic: "topic", Value: sarama.StringEncoder("message")})

// Tranzaksiyanı təsdiqlə
producer.CommitTxn()

Bu yolla, Kafka ilə işləyərkən exactly-once semantikasına nail olmaq mümkündür.