Trabajo con Kafka en PHP: bibliotecas, instalación y ejemplos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con Kafka en PHP: descripción general de bibliotecas y ejemplos prácticos



Apache Kafka es una plataforma distribuida para transmisión de datos en flujo que se ha convertido en el estándar de facto para construir sistemas de mensajería de alta carga. En el ecosistema PHP, la integración con Kafka es posible a través de varias bibliotecas, cada una con sus propias características. En este artículo analizaremos dos bibliotecas principales: php-rdkafka (extensión en C) y longlang/phpkafka (PHP puro), y mostraremos ejemplos de código para productor y consumidor.



1. Biblioteca php-rdkafka



php-rdkafka es una extensión nativa de PHP basada en la biblioteca librdkafka. Ofrece el máximo rendimiento y control total sobre la configuración de Kafka. Es adecuada para proyectos en producción con alta carga.



Instalación

La instalación requiere tener librdkafka y PECL:

# Instalación de librdkafka (Ubuntu/Debian)sudo apt-get install librdkafka-dev

# Instalación de la extensión a través de PECLsudo pecl install rdkafka

# Habilitación en php.iniextension=rdkafka.so


Ejemplo: productor (Producer)

El productor envía mensajes a un tópico de Kafka. Es importante configurar correctamente el envío asíncrono y el manejo de errores:

<?phpuse RdKafka\\Producer;use RdKafka\\Conf;

$conf = new Conf();$conf->set('bootstrap.servers', 'localhost:9092');$conf->set('acks', 'all'); // esperar confirmación de todas las réplicas

$producer = new Producer($conf);$topic = $producer->newTopic('test-topic');

// Envío del mensaje$topic->produce(RD_KAFKA_PARTITION_UA, 0, '¡Hola Kafka!');$producer->flush(1000); // esperar entrega (1 seg)

echo "Mensaje enviado";


Ejemplo: consumidor (Consumer)

El consumidor lee mensajes de un tópico. Se recomienda usar grupos de consumidores para balancear la carga:

<?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 "Esperando mensajes...";while (true) { $message = $consumer->consume(120 * 1000); // tiempo de espera 2 minutos switch ($message->err) { case RD_KAFKA_RESP_ERR_NO_ERROR: echo "Recibido: " . $message->payload . ""; break; case RD_KAFKA_RESP_ERR__PARTITION_EOF: echo "Fin de partición alcanzado"; break; case RD_KAFKA_RESP_ERR__TIMED_OUT: echo "Tiempo de espera agotado"; break; default: echo "Error: " . $message->errstr() . ""; break; }}


2. Biblioteca longlang/phpkafka



longlang/phpkafka es una implementación del protocolo Kafka en PHP puro sin dependencias externas. Es más fácil de instalar (no requiere compilación) y es adecuada para desarrollo, pruebas o proyectos con requisitos de rendimiento bajos.



Instalación

Instalación a través de Composer:

composer require longlang/phpkafka


Ejemplo: productor

<?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', '¡Hola Kafka desde PHP puro!', 'key-1');echo "Mensaje enviado";


Ejemplo: consumidor

<?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