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.