Sobes.tech
Junior — Middle

Kafka'da en az bir kez mesaj teslimatı nasıl sağlanır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Apache Kafka'da "en az bir kez" garantisiyle mesaj teslimi, onaylar (acknowledgments) ve ofsetlerin (offsets) yönetimi mekanizmasıyla sağlanır.

İşlem şu şekildedir:

  1. Üretici, Kafka'ya bir mesaj gönderir ve broker'dan onay bekler (örneğin, ack=all — tüm replikalardan onay).
  2. Mesaj, broker'un günlüklerine (loglara) kaydedilir.
  3. Tüketici mesajı okur ve başarılı işlemden sonra, Kafka'ya bir ofset (offset) onayı (commit) gönderir.

Eğer tüketici onaylamadan çökerse, yeniden başlatıldığında mesajı tekrar okuyacaktır, bu da "en az bir kez" teslimi sağlar.

Go dilinde sarama kütüphanesi kullanılarak örnek:

consumer, err := sarama.NewConsumerGroup(brokers, groupID, config)
// ...
// Mesaj işleyici içinde:
func (h *handler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
    for message := range claim.Messages() {
        process(message) // mesaj işleme
        sess.MarkMessage(message, "") // işleme onayı
    }
    return nil
}

Yani, onay gönderilmediği takdirde, mesaj tekrar teslim edilir.