Sobes.tech
Junior — Middle

Kafka'da iste'molchi o'zining ma'lumot oqimidagi holatini qanday saqlaydi?

sobes.tech AI

AIdan javob

Apache Kafka-da iste'molchi o'z pozitsiyasini ma'lumot oqimida offsetlar yordamida saqlaydi. Offset — bu mavzuning partitionidagi xabarning ketma-ket raqami.

Iste'molchi o'z hozirgi offsetini vaqti-vaqti bilan yozib boradi (commit qiladi), shunda qayta ishga tushirilganda yoki xatolik yuz berganda, to'g'ri joydan o'qishni davom ettirish mumkin. Commit avtomatik (auto-commit) yoki qo'lda bo'lishi mumkin.

Go uchun Kafka mijozlarida (masalan, sarama) offset odatda Kafka tomonidan boshqariladigan __consumer_offsets maxsus mavzuda saqlanadi. Bu bir guruhdagi bir nechta iste'molchilarga o'qishni muvofiqlashtirish va har bir xabar faqat bir marta ishlashini ta'minlash imkonini beradi.

Go-da sarama yordamida qo'lda offset commit qilish misoli:

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

for msg := range partitionConsumer.Messages() {
    // xabarni ishlash
    fmt.Println(string(msg.Value))
    // offsetni yozib borish
    consumer.MarkOffset(msg, "")
}

Shunday qilib, iste'molchining oqimdagi pozitsiyasi — bu Kafka'da saqlangan va to'g'ri joydan o'qishni davom ettirish imkonini beradigan oxirgi commit qilingan offset.