Sarama क्या है और इसकी आवश्यकता क्यों है?
Sarama एक उच्च-प्रदर्शन वाली, शुद्ध Go लाइब्रेरी है जो Apache Kafka के साथ काम करने के लिए बनाई गई है। यह Kafka क्लस्टर के साथ इंटरैक्ट करने के लिए पूर्ण टूलसेट प्रदान करती है, जिसमें संदेश भेजने के लिए प्रोड्यूसर (producers), संदेश पढ़ने के लिए कंज्यूमर (consumers), और टॉपिक, पार्टीशन तथा कॉन्फ़िगरेशन प्रबंधित करने के लिए एडमिनिस्ट्रेटिव फंक्शन शामिल हैं।
Apache Kafka एक डिस्ट्रीब्यूटेड डेटा स्ट्रीमिंग प्लेटफ़ॉर्म है जिसका उपयोग रीयल-टाइम पाइपलाइन, मैसेजिंग सिस्टम, इवेंट प्रोसेसिंग और लॉग स्टोरेज के लिए किया जाता है। Sarama Go एप्लिकेशन को Kafka के साथ आसानी से इंटीग्रेट करने में मदद करती है, जिससे विश्वसनीय और कुशल डेटा ट्रांसफ़र सुनिश्चित होता है।
Sarama का उपयोग क्यों करें?
- शुद्ध Go: Sarama पूरी तरह से Go में लिखी गई है, बिना किसी C/C++ बाहरी निर्भरता के, जो बिल्ड और डिप्लॉयमेंट को आसान बनाता है।
- उच्च प्रदर्शन: यह लाइब्रेरी बड़े डेटा वॉल्यूम के लिए ऑप्टिमाइज़ की गई है और एसिंक्रोनस मैसेज सेंडिंग को सपोर्ट करती है।
- लचीलापन: प्रोड्यूसर (सिंक्रोनस, एसिंक्रोनस) और कंज्यूमर (सिंपल, कंज्यूमर ग्रुप) के विभिन्न मोड को सपोर्ट करती है।
- सक्रिय समुदाय: Sarama Go के लिए सबसे लोकप्रिय Kafka लाइब्रेरी में से एक है, जिसमें बड़ी संख्या में योगदानकर्ता और विस्तृत दस्तावेज़ीकरण है।
- पूर्ण नियंत्रण: डेवलपर को कॉन्फ़िगरेशन पर पूर्ण नियंत्रण देती है, जिसमें ऑफ़सेट प्रबंधन, सीरियलाइज़ेशन/डीसीरियलाइज़ेशन और एरर हैंडलिंग शामिल है।
इंस्टॉलेशन
Sarama को Go प्रोजेक्ट में इंस्टॉल करना पैकेज मैनेजर go get के माध्यम से मानक तरीके से किया जाता है।
go get github.com/IBM/sarama
इस कमांड को चलाने के बाद, लाइब्रेरी आपकी go.mod फ़ाइल में जुड़ जाएगी, और आप इसे अपने कोड में इम्पोर्ट कर सकते हैं।
महत्वपूर्ण: सुनिश्चित करें कि आपके पास Go का वर्शन 1.18 या उससे ऊपर है, क्योंकि Sarama आधुनिक भाषा सुविधाओं का उपयोग करती है।
त्वरित शुरुआत: संदेश भेजना और प्राप्त करना
आइए एक सरल उदाहरण लिखें जो Kafka टॉपिक में एक संदेश भेजेगा और उसे पढ़ेगा।
1. प्रोड्यूसर (Producer) — संदेश भेजना
package main
import (
"fmt"
"log"
"github.com/IBM/sarama"
)
func main() {
// 1. प्रोड्यूसर कॉन्फ़िगरेशन
config := sarama.NewConfig()
config.Producer.Return.Successes = true // सिंक्रोनस मोड के लिए आवश्यक
config.Producer.RequiredAcks = sarama.WaitForAll // सभी रेप्लिका से पुष्टि की प्रतीक्षा करें
// 2. सिंक्रोनस प्रोड्यूसर बनाना
producer, err := sarama.NewSyncProducer([]string{"localhost:9092"}, config)
if err != nil {
log.Fatalf("प्रोड्यूसर बनाने में विफल: %v", err)
}
defer producer.Close()
// 3. संदेश बनाना
msg := &sarama.ProducerMessage{
Topic: "my-topic",
Key: sarama.StringEncoder("my-key"),
Value: sarama.StringEncoder("नमस्ते, Kafka!"),
}
// 4. संदेश भेजना
partition, offset, err := producer.SendMessage(msg)
if err != nil {
log.Fatalf("संदेश भेजने में विफल: %v", err)
}
fmt.Printf("संदेश पार्टीशन %d और ऑफ़सेट %d पर भेजा गया\n", partition, offset)
}
2. कंज्यूमर (Consumer) — संदेश प्राप्त करना
package main
import (
"fmt"
"log"
"os"
"os/signal"
"syscall"
"github.com/IBM/sarama"
)
func main() {
// 1. कंज्यूमर कॉन्फ़िगरेशन
config := sarama.NewConfig()
config.Consumer.Return.Errors = true
config.Consumer.Offsets.Initial = sarama.OffsetOldest // शुरुआत से पढ़ें
// 2. कंज्यूमर बनाना
consumer, err := sarama.NewConsumer([]string{"localhost:9092"}, config)
if err != nil {
log.Fatalf("कंज्यूमर बनाने में विफल: %v", err)
}
defer consumer.Close()
// 3. पार्टीशन पर सब्सक्राइब करना
parti