Travailler avec Kafka en PHP : bibliothèques, installation et exemples de code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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.so


Exemple : 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/phpkafka


Exemple : 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

Recommendations