Sobes.tech
Junior — Middle

Kafka'daki tüketici, veri akışındaki konumunu nasıl kaydeder?

sobes.tech yapay zeka

AI'dan gelen yanıt

Apache Kafka'da tüketici, veri akışındaki konumunu kaydırmalar (offsets) kullanarak saklar. Offset, bir konunun bölümündeki mesajın sıralı numarasıdır.

Tüketici, belirli aralıklarla mevcut offset'i kaydeder (commit eder), böylece yeniden başlatıldığında veya hata durumunda doğru yerden okumaya devam edebilir. Commit otomatik (auto-commit) veya manuel olabilir.

Go tabanlı Kafka istemcilerinde (örneğin, sarama), offset genellikle Kafka tarafından yönetilen __consumer_offsets adlı özel bir konuda saklanır. Bu, bir grup içindeki birkaç tüketicinin okuma işlemlerini koordine etmesine ve her mesajın tam olarak bir kez işlenmesini sağlamasına olanak tanır.

Manuel offset commit örneği, sarama kullanılarak Go'da:

partitionConsumer, _ := consumer.ConsumePartition(topic, partition, sarama.OffsetNewest)

for msg := range partitionConsumer.Messages() {
    // mesaj işleme
    fmt.Println(string(msg.Value))
    // offset commit
    consumer.MarkOffset(msg, "")
}

Bu şekilde, tüketicinin akış içindeki konumu, Kafka'da saklanan ve okuma işlemini doğru yerden devam ettirmeyi sağlayan en son onaylanmış offset'tir.