Travailler avec Kafka en PHP : bibliothèques, connexion et exemples de code
\n\nApache Kafka est une plateforme distribuée de streaming de données qui permet de publier, stocker et traiter des flux de messages en temps réel. Dans l'écosystème PHP, l'extension php-rdkafka est utilisée pour travailler avec Kafka — une surcouche de la bibliothèque librdkafka écrite en C. Dans cet article, nous allons voir comment installer l'outil, écrire un producteur et un consommateur, et examiner les scénarios d'utilisation typiques.
\n\nQu'est-ce que php-rdkafka ?
\n\nphp-rdkafka est l'extension PHP officielle pour travailler avec Apache Kafka. Elle fournit une interface haute performance pour envoyer et recevoir des messages. L'extension prend en charge toutes les fonctionnalités clés de Kafka : topics, partitions, groupes de consommateurs, commits manuels, compression et bien plus.
Fonctionnalités principales :
\n- \n
- Création de producteurs (producers) pour envoyer des messages dans des topics. \n
- Création de consommateurs (consumers) pour lire des messages depuis des topics. \n
- Prise en charge des groupes de consommateurs et du rééquilibrage automatique. \n
- Travail avec les partitions et gestion manuelle des offsets. \n
- Compression des messages (gzip, snappy, lz4, zstd). \n
- Envoi asynchrone et traitement par lots. \n
Installation de php-rdkafka
\n\nL'installation de l'extension est possible via PECL ou la compilation depuis les sources. La méthode recommandée est via PECL :
\n\n# Installation via PECL\npecl install rdkafka\n\n# Pour Ubuntu/Debian, installez d'abord librdkafka-dev\nsudo apt-get install librdkafka-dev\npecl install rdkafka\n\n# Ajoutez l'extension dans php.ini\nextension=rdkafka.so\n\nAprès l'installation, vérifiez que l'extension est chargée :
\n\nphp -m | grep rdkafka\n\nSi vous utilisez Composer, vous pouvez également installer le paquet arnaud-lb/php-rdkafka pour l'autochargement :
composer require arnaud-lb/php-rdkafka\n\nExemple de producteur (Producer)
\n\nLe producteur envoie des messages dans un topic Kafka spécifié. Voici un exemple de base avec un envoi synchrone :
\n\n<?php\nrequire_once 'vendor/autoload.php';\n\n$conf = new RdKafka\\Conf();\n$conf->set('metadata.broker.list', 'localhost:9092');\n\n$producer = new RdKafka\\Producer($conf);\n$topic = $producer->newTopic('test_topic');\n\n// Envoi du message\n$topic->produce(RD_KAFKA_PARTITION_UA, 0, 'Bonjour, Kafka depuis PHP !');\n\n// Attente de l'envoi de tous les messages\n$producer->flush(1000);\necho "Message envoyé\\n";\n\nExplications du code :
\n- \n
metadata.broker.list— adresse du broker Kafka (par défaut localhost:9092). \n RD_KAFKA_PARTITION_UA— sélection automatique de la partition. \n flush(1000)— bloque l'exécution jusqu'à l'envoi de tous les messages (timeout de 1 seconde). \n
Exemple de consommateur (Consumer)
\n\nLe consommateur lit les messages depuis un topic. Il est important de spécifier le groupe de consommateurs et la stratégie de commit des offsets :
\n\n<?php\nrequire_once 'vendor/autoload.php';\n\n$conf = new RdKafka\\Conf();\n$conf->set('metadata.broker.list', 'localhost:9092');\n$conf->set('group.id', 'my_consumer_group');\n$conf->set('auto.offset.reset', 'earliest');\n\n$consumer = new RdKafka\\KafkaConsumer($conf);\n$consumer->subscribe(['test_topic']);\n\necho "Attente des messages...\\n";\n\nwhile (true) {\n $message = $consumer->consume(120 * 1000); // timeout de 2 minutes\n switch ($message->err) {\n case RD_KAFKA_RESP_ERR_NO_ERROR:\n echo "Message reçu : " . $message->payload . "\\n";\n break;\n case RD_KAFKA_RESP_ERR__PARTITION_EOF:\n echo "Fin de la partition atteinte\\n";\n break;\n case RD_KAFKA_RESP_ERR__TIMED_OUT:\n echo "Timeout\\n";\n break;\n defau Aussi dans la bibliothèque
Qt pour C++ : guide complet avec exemples
Client OAuth pour PHP : authentification via les réseaux sociaux et API