Travailler avec Kafka en PHP : aperçu des bibliothèques et exemples pratiques
Apache Kafka est une plateforme distribuée de streaming de données qui est devenue le standard de facto pour la construction de systèmes d'échange de messages à forte charge. Dans l'écosystème PHP, l'intégration avec Kafka est possible via plusieurs bibliothèques, chacune ayant ses propres caractéristiques. Dans cet article, nous allons examiner deux bibliothèques principales : php-rdkafka (extension en C) et longlang/phpkafka (PHP pur), et montrer des exemples de code pour un producteur et un consommateur.
1. Bibliothèque php-rdkafka
php-rdkafka est une extension PHP native basée sur la bibliothèque librdkafka. Elle offre des performances maximales et un contrôle total sur la configuration de Kafka. Elle convient aux projets de production à forte charge.
Installation
L'installation nécessite librdkafka et PECL :
# Installation de librdkafka (Ubuntu/Debian)sudo apt-get install librdkafka-dev
# Installation de l'extension via PECLsudo pecl install rdkafka
# Activation dans php.iniextension=rdkafka.soExemple : producteur (Producer)
Le producteur envoie des messages dans un topic Kafka. Il est important de configurer correctement l'envoi asynchrone et la gestion des erreurs :
<?phpuse RdKafka\\Producer;use RdKafka\\Conf;
$conf = new Conf();$conf->set('bootstrap.servers', 'localhost:9092');$conf->set('acks', 'all'); // attente de confirmation de toutes les répliques
$producer = new Producer($conf);$topic = $producer->newTopic('test-topic');
// Envoi du message$topic->produce(RD_KAFKA_PARTITION_UA, 0, 'Bonjour Kafka !');$producer->flush(1000); // attente de livraison (1 sec)
echo "Message envoyé";Exemple : consommateur (Consumer)
Le consommateur lit les messages d'un topic. Il est recommandé d'utiliser des groupes de consommateurs pour l'équilibrage de charge :
<?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 "Attente de messages...";while (true) { $message = $consumer->consume(120 * 1000); // timeout 2 minutes switch ($message->err) { case RD_KAFKA_RESP_ERR_NO_ERROR: echo "Reçu : " . $message->payload . ""; break; case RD_KAFKA_RESP_ERR__PARTITION_EOF: echo "Fin de partition atteinte"; break; case RD_KAFKA_RESP_ERR__TIMED_OUT: echo "Timeout"; break; default: echo "Erreur : " . $message->errstr() . ""; break; }}2. Bibliothèque longlang/phpkafka
longlang/phpkafka est une implémentation du protocole Kafka en PHP pur sans dépendances externes. Elle est plus simple à installer (ne nécessite pas de compilation) et convient au développement, aux tests ou aux projets avec des exigences de performance modestes.
Installation
Installation via Composer :
composer require longlang/phpkafkaExemple : producteur
<?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', 'Bonjour Kafka depuis PHP pur !', 'key-1');echo "Message envoyé";Exemple : consommateur
<?phpuse longlang\\phpkafka\\Consumer\\Consumer;use longlang\\phpkafka\\Consumer\\ConsumerConfig;
$config = new ConsumerConfig();$config->setBootstrapServer('localhost:9092');$config->setGroupId('my-group');$config->setTopic('te Aussi dans la bibliothèque
Framework CLI pour JavaScript (Node.js) : Commander.js – création d'applications console
Travailler avec Excel en JavaScript (Node.js) : bibliothèques et outils
Poco C++ : guide complet avec exemples pratiques
Blade PHP : guide complet avec exemples pratiques
Apprentissage automatique en Kotlin : aperçu des bibliothèques pour la Data Science et le ML