KafkaJS लाइब्रेरी के साथ Node.js में Apache Kafka का उपयोग
Apache Kafka एक डिस्ट्रीब्यूटेड इवेंट स्ट्रीमिंग प्लेटफॉर्म है, जो हाई-लोड मैसेजिंग सिस्टम बनाने का मानक बन चुका है। Node.js इकोसिस्टम में Kafka के साथ काम करने के लिए KafkaJS सबसे लोकप्रिय और स्थिर लाइब्रेरी है। यह पूरी तरह से एसिंक्रोनस क्लाइंट है, जो शुद्ध JavaScript में लिखा गया है और Kafka की सभी प्रमुख सुविधाओं को सपोर्ट करता है: प्रोड्यूसर, कंज्यूमर, कंज्यूमर ग्रुप्स, ऑफसेट मैनेजमेंट और ट्रांजेक्शन।
इस लेख में हम विस्तार से जानेंगे कि KafkaJS कैसे इंस्टॉल करें, Kafka क्लस्टर से कनेक्शन कैसे सेट करें, मैसेज कैसे भेजें और पढ़ें, साथ ही प्रोडक्शन एनवायरनमेंट में इस लाइब्रेरी के साथ काम करने के बेस्ट प्रैक्टिसेज को भी कवर करेंगे।
KafkaJS की इंस्टॉलेशन और सेटअप
लाइब्रेरी को npm पैकेज मैनेजर के माध्यम से इंस्टॉल करें:
npm install kafkajs
इंस्टॉलेशन के बाद, ब्रोकर्स के एड्रेस और क्लाइंट आईडी देकर एक क्लाइंट बनाएं। न्यूनतम कॉन्फ़िगरेशन का उदाहरण:
const { Kafka } = require('kafkajs');
const kafka = new Kafka({
clientId: 'my-app',
brokers: ['localhost:9092']
});
प्रोडक्शन एनवायरनमेंट के लिए, फॉल्ट टॉलरेंस के लिए कई ब्रोकर्स को कॉमा से अलग करके निर्दिष्ट करने और SSL तथा SASL ऑथेंटिकेशन कॉन्फ़िगर करने की सलाह दी जाती है:
const kafka = new Kafka({
clientId: 'my-production-app',
brokers: ['broker1:9092', 'broker2:9092', 'broker3:9092'],
ssl: true,
sasl: {
mechanism: 'scram-sha-256',
username: 'myuser',
password: 'mypassword'
}
});
प्रोड्यूसर: टॉपिक में मैसेज भेजना
प्रोड्यूसर Kafka टॉपिक में मैसेज पब्लिश करने के लिए जिम्मेदार होता है। KafkaJS प्रोड्यूसर के दो मोड प्रदान करता है: सिंपल (send) और ट्रांजेक्शनल (सटीक डिलीवरी के लिए)। मैसेज भेजने का बेसिक उदाहरण देखें:
const producer = kafka.producer();
async function sendMessage() {
await producer.connect();
await producer.send({
topic: 'test-topic',
messages: [
{ key: 'user1', value: 'Hello Kafka from Node.js!' },
{ key: 'user2', value: JSON.stringify({ orderId: 123, amount: 2500 }) }
]
});
await producer.disconnect();
}
sendMessage().catch(console.error);
मुख्य बिंदु:
- topic — वह टॉपिक का नाम जिसमें मैसेज भेजा जा रहा है।
- messages — ऑब्जेक्ट्स की एक ऐरे, जिनमें से प्रत्येक में
key(वैकल्पिक) औरvalue(स्ट्रिंग या Buffer) हो सकता है। - एप्लिकेशन शुरू करते समय
producer.connect()को एक बार कॉल करने और कनेक्शन को पुनः उपयोग करने की सलाह दी जाती है।
प्रोडक्शन में परफॉर्मेंस बढ़ाने के लिए कनेक्शन पूल और acks सेटिंग का उपयोग करें:
const producer = kafka.producer({
allowAutoTopicCreation: false,
transactionTimeout: 30000
});
await producer.send({
topic: 'orders',
messages: [{ value: 'New order' }],
acks: -1 // सभी रेप्लिका से कन्फर्मेशन की प्रतीक्षा करें
});
कंज्यूमर: टॉपिक से मैसेज पढ़ना
कंज्यूमर एक या अधिक टॉपिक से मैसेज पढ़ने की अनुमति देता है। सबसे महत्वपूर्ण अवधारणा है कंज्यूमर ग्रुप्स, जो लोड बैलेंसिंग सुनिश्चित करते हैं और गारंटी देते हैं कि प्रत्येक मैसेज को ग्रुप के केवल एक कंज्यूमर द्वारा प्रोसेस किया जाएगा।
const consumer = kafka.consumer({ groupId: 'my-group' });
async function consumeMessages() {
await consumer.connect();
await consumer.subscribe({ topic: 'test-topic', fromBeginning: true });
await consumer.run({
eachMessage: async ({ topic, partition, message }) => {
console.log({
partition,
offset: message.offset,
key: message.key.toString(),
value: message.value.toString()
});
}
});
}
consumeMessages().catch(console.error);