KafkaJS के साथ TypeScript में Kafka के साथ कार्य
Apache Kafka एक वितरित डेटा स्ट्रीमिंग प्लेटफ़ॉर्म है, जिसका व्यापक रूप से माइक्रोसर्विस आर्किटेक्चर, इवेंट प्रोसेसिंग और रीयल-टाइम एनालिटिक्स में उपयोग किया जाता है। TypeScript में विकास करते समय, Kafka के साथ इंटरैक्ट करने के लिए सबसे लोकप्रिय लाइब्रेरी में से एक KafkaJS है। यह TypeScript के पूर्ण समर्थन के साथ एक आधुनिक, एसिंक्रोनस API प्रदान करता है, जो इसे विश्वसनीय और स्केलेबल एप्लिकेशन बनाने के लिए एक आदर्श विकल्प बनाता है।
KafkaJS क्या है?
KafkaJS JavaScript/TypeScript में लिखी गई Apache Kafka के लिए एक क्लाइंट लाइब्रेरी है। यह सभी बुनियादी संचालनों का समर्थन करती है: संदेश भेजना और पढ़ना, उपभोक्ता समूहों का प्रबंधन, टॉपिक और पार्टीशन के साथ कार्य करना। अंतर्निहित प्रकारों के कारण, KafkaJS IDE में सख्त टाइपिंग और ऑटो-कम्प्लीशन सुनिश्चित करता है, जो विकास और डिबगिंग को काफी सरल बनाता है।
KafkaJS की स्थापना
आरंभ करने के लिए, npm के माध्यम से लाइब्रेरी स्थापित करें:
npm install kafkajsयदि आप TypeScript का उपयोग कर रहे हैं, तो अतिरिक्त प्रकारों की आवश्यकता नहीं है - वे पहले से ही पैकेज में शामिल हैं।
बुनियादी सेटअप और कनेक्शन
पहला कदम Kafka क्लाइंट का एक इंस्टेंस बनाना है। क्लाइंट आईडी और ब्रोकर पते निर्दिष्ट करें:
import { Kafka } from 'kafkajs';
const kafka = new Kafka({ clientId: 'my-app', brokers: ['localhost:9092']});
// कनेक्शन की जाँचconst admin = kafka.admin();await admin.connect();console.log('Connected to Kafka');await admin.disconnect();प्रोड्यूसर बनाना (Producer)
प्रोड्यूसर टॉपिक में संदेश भेजता है। KafkaJS भेजने पर स्वचालित टॉपिक निर्माण का समर्थन करता है (यदि ब्रोकर कॉन्फ़िगरेशन में सक्षम हो)।
import { Kafka, Partitioners } from 'kafkajs';
const producer = kafka.producer({ createPartitioner: Partitioners.DefaultPartitioner});
await producer.connect();
// एक संदेश भेजनाawait producer.send({ topic: 'orders', messages: [ { key: 'order-123', value: JSON.stringify({ userId: 1, amount: 250 }) } ]});
// कई संदेश भेजनाawait producer.send({ topic: 'orders', messages: [ { key: 'order-124', value: 'Message 2' }, { key: 'order-125', value: 'Message 3' } ]});
await producer.disconnect();कंस्यूमर बनाना (Consumer)
कंस्यूमर टॉपिक से संदेश पढ़ता है। इसे एक या अधिक टॉपिक की सदस्यता लेनी होती है और एक उपभोक्ता समूह (consumer group) में पंजीकृत होना चाहिए।
const consumer = kafka.consumer({ groupId: 'order-group' });
await consumer.connect();await consumer.subscribe({ topic: 'orders', fromBeginning: true });
await consumer.run({ eachMessage: async ({ topic, partition, message }) => { console.log({ partition, offset: message.offset, key: message.key?.toString(), value: message.value?.toString(), }); },});उपभोक्ता समूहों के साथ कार्य
उपभोक्ता समूह कंस्यूमर के कई इंस्टेंस के बीच लोड वितरित करने की अनुमति देते हैं। Kafka स्वचालित रूप से एक ही समूह के भीतर विभिन्न उपभोक्ताओं को टॉपिक के पार्टीशन असाइन करता है। यदि कोई उपभोक्ता विफल हो जाता है, तो उसके पार्टीशन पुनर्वितरित हो जाते हैं।
// एक ही समूह में दो कंस्यूमर अलग-अलग पार्टीशन पढ़ेंगेconst consumer1 = kafka.consumer({ groupId: 'order-group' });const consumer2 = kafka.consumer({ groupId: 'order-group' });
// प्रत्येक एक ही टॉपिक की सदस्यता लेता हैawait consumer1.subscribe({ topic: 'orders' });await consumer2.subscribe({ topic: 'orders' });त्रुटि प्रबंधन और पुनः प्रयास
वास्तविक एप्लिकेशन में, कनेक्शन त्रुटियों, टाइमआउट और विफलताओं को सही ढंग से संभालना महत्वपूर्ण है। KafkaJS कई तंत्र प्रदान करता है:
- Retry — अस्थायी त्रुटियों पर स्वचालित पुनः प्रयास।