العمل مع Kafka في PHP: نظرة عامة على المكتبات وأمثلة عملية
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
# تثبيت الإضافة عبر PECLsudo pecl install rdkafka
# التفعيل في php.iniextension=rdkafka.soمثال: المنتج (Producer)
يرسل المنتج الرسائل إلى موضوع 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 "تم إرسال الرسالة";مثال: المستهلك (Consumer)
يقرأ المستهلك الرسائل من الموضوع. يُوصى باستخدام مجموعات المستهلكين لموازنة التحميل:
<?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); // مهلة دقيقتين 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 هي تطبيق لبروتوكول Kafka بلغة PHP خالصة بدون تبعيات خارجية. أسهل في التثبيت (لا تتطلب تجميع) ومناسبة للتطوير والاختبار أو المشاريع ذات متطلبات الأداء المنخفضة.
التثبيت
التثبيت عبر 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