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:
- Üretici, Kafka'ya bir mesaj gönderir ve broker'dan onay bekler (örneğin, ack=all — tüm replikalardan onay).
- Mesaj, broker'un günlüklerine (loglara) kaydedilir.
- 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.