PHP में Kafka के साथ काम करना: लाइब्रेरीज़ का अवलोकन और व्यावहारिक उदाहरण
Apache Kafka एक वितरित डेटा स्ट्रीमिंग प्लेटफ़ॉर्म है जो उच्च-लोड मैसेजिंग सिस्टम बनाने के लिए डी-फैक्टो मानक बन गया है। PHP इकोसिस्टम में, Kafka के साथ एकीकरण कई लाइब्रेरीज़ के माध्यम से संभव है, जिनमें से प्रत्येक की अपनी विशेषताएं हैं। इस लेख में, हम दो मुख्य लाइब्रेरीज़ पर चर्चा करेंगे: php-rdkafka (C एक्सटेंशन) और longlang/phpkafka (शुद्ध PHP), साथ ही प्रोड्यूसर और कंज़्यूमर के लिए कोड उदाहरण दिखाएंगे।
1. php-rdkafka लाइब्रेरी
php-rdkafka एक नेटिव PHP एक्सटेंशन है जो librdkafka लाइब्रेरी पर आधारित है। यह अधिकतम प्रदर्शन और Kafka कॉन्फ़िगरेशन पर पूर्ण नियंत्रण प्रदान करता है। यह उच्च लोड वाले प्रोडक्शन प्रोजेक्ट्स के लिए उपयुक्त है।
इंस्टॉलेशन
इंस्टॉलेशन के लिए librdkafka और PECL की आवश्यकता है:
# librdkafka इंस्टॉल करें (Ubuntu/Debian)sudo apt-get install librdkafka-dev
# PECL के माध्यम से एक्सटेंशन इंस्टॉल करेंsudo pecl install rdkafka
# php.ini में सक्षम करेंextension=rdkafka.soउदाहरण: प्रोड्यूसर
प्रोड्यूसर Kafka टॉपिक पर संदेश भेजता है। एसिंक्रोनस भेजने और त्रुटि प्रबंधन को सही ढंग से कॉन्फ़िगर करना महत्वपूर्ण है:
<?phpuse RdKafka\\Producer;use RdKafka\\Conf;
$conf = new Conf();$conf->set('bootstrap.servers', 'localhost:9092');$conf->set('acks', 'all'); // सभी रेप्लिका से पुष्टि की प्रतीक्षा करें
$producer = new Producer($conf);$topic = $producer->newTopic('test-topic');
// संदेश भेजें$topic->produce(RD_KAFKA_PARTITION_UA, 0, 'Hello Kafka!');$producer->flush(1000); // डिलीवरी की प्रतीक्षा करें (1 सेकंड)
echo "संदेश भेज दिया गया";उदाहरण: कंज़्यूमर
कंज़्यूमर टॉपिक से संदेश पढ़ता है। लोड संतुलन के लिए उपभोक्ता समूहों का उपयोग करने की अनुशंसा की जाती है:
<?phpuse RdKafka\\KafkaConsumer;use RdKafka\\Conf;
$conf = new Conf();$conf->set('bootstrap.servers', 'localhost:9092');$conf->set('group.id', 'my-consumer-group');$conf->set('auto.offset.reset', 'earliest');
$consumer = new KafkaConsumer($conf);$consumer->subscribe(['test-topic']);
echo "संदेशों की प्रतीक्षा...";while (true) { $message = $consumer->consume(120 * 1000); // टाइमआउट 2 मिनट switch ($message->err) { case RD_KAFKA_RESP_ERR_NO_ERROR: echo "प्राप्त: " . $message->payload . ""; break; case RD_KAFKA_RESP_ERR__PARTITION_EOF: echo "विभाजन का अंत पहुँच गया"; break; case RD_KAFKA_RESP_ERR__TIMED_OUT: echo "टाइमआउट"; break; default: echo "त्रुटि: " . $message->errstr() . ""; break; }}2. longlang/phpkafka लाइब्रेरी
longlang/phpkafka बिना किसी बाहरी निर्भरता के शुद्ध PHP में Kafka प्रोटोकॉल का कार्यान्वयन है। यह इंस्टॉल करने में आसान है (कंपाइलेशन की आवश्यकता नहीं) और विकास, परीक्षण या कम प्रदर्शन आवश्यकताओं वाले प्रोजेक्ट्स के लिए उपयुक्त है।
इंस्टॉलेशन
Composer के माध्यम से इंस्टॉलेशन:
composer require longlang/phpkafkaउदाहरण: प्रोड्यूसर
<?phpuse longlang\\phpkafka\\Producer\\Producer;use longlang\\phpkafka\\Producer\\ProducerConfig;
$config = new ProducerConfig();$config->setBootstrapServer('localhost:9092');$config->setUpdateBrokers(true);
$producer = new Producer($config);$producer->send('test-topic', 'Hello Kafka from pure PHP!', 'key-1');echo "संदेश भेज दिया गया";उदाहरण: कंज़्यूमर
<?phpuse longlang\\phpkafka\\Consumer\\Consumer;use longlang\\phpkafka\\Consumer\\ConsumerConfig;
$config = new ConsumerConfig();$config->setBootstrapServer('localhost:9092');$config->setGroupId('my-group');$config->setTopic('te