Sobes.tech
Junior — Middle

როგორ ინახავს Kafka-ის მომხმარებელი თავის პოზიციას მონაცემთა ნაკადში?

sobes.tech AI

პასუხი AI-სგან

Apache Kafka-లో, వినియోగదారు తన స్థానం డేటా ప్రవాహంలో ఆఫ్సెట్‌లను ఉపయోగించి నిల్వ చేస్తాడు. ఆఫ్సెట్ అనేది టాపిక్ యొక్క పార్టిషన్‌లో సందేశం యొక్క వరుస సంఖ్య.

వినియోగదారు సమయానుసారంగా ప్రస్తుత ఆఫ్సెట్‌ను క‌మిట్ చేస్తాడు (సేవ్ చేస్తాడు), తద్వారా రీస్టార్ట్ లేదా లోపం జరిగినప్పుడు సరైన స్థానంలో చదవడం కొనసాగించవచ్చు. క‌మిట్ ఆటోమేటిక్ (auto-commit) లేదా మాన్యువల్ కావచ్చు.

Go-క్లయింట్ Kafka (ఉదాహరణకు, sarama)లో, ఆఫ్సెట్ సాధారణంగా Kafka స్వయంగా నిర్వహించే __consumer_offsets అనే ప్రత్యేక టాపిక్‌లో నిల్వ ఉంటుంది. ఇది ఒక గ్రూప్‌లో అనేక వినియోగదారులు చదవడాన్ని సమన్వయపరచడానికి మరియు ప్రతి సందేశం ఖచ్చితంగా ఒకసారి ప్రాసెస్ చేయబడేలా చేయడానికి అనుమతిస్తుంది.

మాన్యువల్ ఆఫ్సెట్ క‌మిట్ ఉదాహరణ, sarama ఉపయోగించి Goలో:

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

for msg := range partitionConsumer.Messages() {
    // సందేశం ప్రాసెస్ చేయడం
    fmt.Println(string(msg.Value))
    // ఆఫ్సెట్‌ను క‌మిట్ చేయడం
    consumer.MarkOffset(msg, "")
}

అందువల్ల, ప్రవాహంలో వినియోగదారుని స్థానం చివరి క‌మిట్ చేసిన ఆఫ్సెట్, ఇది Kafkaలో నిల్వ చేయబడింది మరియు సరైన స్థానంలో చదవడం కొనసాగించడానికి అనుమతిస్తుంది.