Rust में Kafka के साथ कार्य: लाइब्रेरी का अवलोकन और व्यावहारिक उदाहरण
Apache Kafka एक वितरित डेटा स्ट्रीमिंग प्लेटफॉर्म है, जिसका व्यापक रूप से विश्वसनीय और स्केलेबल मैसेजिंग सिस्टम बनाने के लिए उपयोग किया जाता है। Rust भाषा, अपने प्रदर्शन और मेमोरी सुरक्षा के कारण, Kafka के साथ काम करने वाले उच्च-लोड अनुप्रयोगों को लिखने के लिए तेजी से लोकप्रिय विकल्प बन रही है। इस लेख में, हम Rust में Kafka के साथ काम करने के लिए मुख्य लाइब्रेरी, उनकी स्थापना और सरल कोड उदाहरण देखेंगे।
Rust में Kafka के लिए लोकप्रिय लाइब्रेरी
वर्तमान में, Rust इकोसिस्टम में Kafka के साथ काम करने के दो मुख्य दृष्टिकोण हैं:
- rdkafka — लोकप्रिय C-लाइब्रेरी librdkafka पर एक रैपर। यह अधिकतम प्रदर्शन और कार्यक्षमता प्रदान करता है, जिसमें Kafka की सभी आधुनिक क्षमताओं (लेन-देन, आइडेम्पोटेंसी, सटीक डिलीवरी गारंटी) का समर्थन शामिल है।
- Kafka-Rust (kafka) — बाहरी निर्भरता के बिना Rust पर Kafka प्रोटोकॉल का शुद्ध कार्यान्वयन। इसे बनाना आसान है, लेकिन यह कार्यक्षमता में rdkafka से पीछे रह सकता है।
अधिकांश production-प्रोजेक्ट्स के लिए rdkafka का उपयोग करने की अनुशंसा की जाती है, क्योंकि यह अधिक परिपक्व, प्रदर्शनकारी और समुदाय द्वारा सक्रिय रूप से समर्थित है।
rdkafka की स्थापना
शुरू करने के लिए, अपने Cargo.toml में निर्भरता जोड़ें:
[dependencies]rdkafka = { version = "0.36", features = ["cmake-build"] }tokio = { version = "1", features = ["full"] } # एसिंक्रोनस कार्य के लिएserde = { version = "1", features = ["derive"] } # डेटा सीरियलाइजेशन के लिएserde_json = "1" # JSON के साथ कार्य के लिएrdkafka लाइब्रेरी को सिस्टम में librdkafka की आवश्यकता होती है। आप इसे सिस्टम पैकेज मैनेजर के माध्यम से स्थापित कर सकते हैं या ऊपर दिए गए उदाहरण की तरह cmake-build फीचर का उपयोग कर सकते हैं — इस स्थिति में लाइब्रेरी स्वचालित रूप से संकलित हो जाएगी।
उदाहरण: बुनियादी प्रोड्यूसर
प्रोड्यूसर निर्दिष्ट Kafka टॉपिक में संदेश भेजता है। यहाँ Tokio पर एक सरल एसिंक्रोनस प्रोड्यूसर का उदाहरण है:
use rdkafka::config::ClientConfig;use rdkafka::producer::{FutureProducer, FutureRecord};use std::time::Duration;
#[tokio::main]async fn main() { // प्रोड्यूसर कॉन्फ़िगरेशन बनाएँ let producer: FutureProducer = ClientConfig::new() .set("bootstrap.servers", "localhost:9092") .set("message.timeout.ms", "5000") .create() .expect("प्रोड्यूसर बनाने में त्रुटि");
// "my-topic" टॉपिक में संदेश भेजें let delivery_status = producer .send( FutureRecord::to("my-topic") .payload("नमस्ते, Rust से Kafka!") .key("संदेश-कुंजी"), Duration::from_secs(0), ) .await;
match delivery_status { Ok(partition_offset) => println!("संदेश भेजा गया: {:?}", partition_offset), Err((e, _)) => eprintln!("भेजने में त्रुटि: {}", e), }}उदाहरण: बुनियादी कंज्यूमर
कंज्यूमर टॉपिक से संदेश पढ़ता है। नीचे मैन्युअल पुष्टिकरण (commit) के साथ एक सिंक्रोनस कंज्यूमर का उदाहरण दिया गया है:
use rdkafka::config::ClientConfig;use rdkafka::consumer::{Consumer, StreamConsumer};use rdkafka::message::Message;use rdkafka::util::get_rdkafka_version;
fn main() { let consumer: StreamConsumer = ClientConfig::new() .set("group.id", "my-consumer-group") .set("bootstrap.servers", "localhost:9092") .set("enable.auto.commit", "false") // मैन्युअल commit .set("auto.offset.reset", "earliest") // शुरुआत से पढ़ें .create() .expect("कंज्यूमर बनाने में त्रुटि");
consumer.subscribe(&["my-topic"]).expect("सब्सक्राइब करने में त्रुटि");
loop { match consumer.recv() { Ok(msg) => { let paylo पुस्तकालय में भी
TypeScript में परीक्षण: फ्रेमवर्क और टूल्स के लिए पूर्ण गाइड
Node.js पर कार्य अनुसूचक (node-cron, node-schedule, Bull)