Trabalhando com Kafka em PHP: bibliotecas, instalação e exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com Kafka em PHP: visão geral das bibliotecas e exemplos práticos



Apache Kafka é uma plataforma distribuída para streaming de dados que se tornou o padrão de facto para a construção de sistemas de troca de mensagens de alta carga. No ecossistema PHP, a integração com Kafka é possível através de várias bibliotecas, cada uma com suas características. Neste artigo, abordaremos duas bibliotecas principais: php-rdkafka (extensão em C) e longlang/phpkafka (PHP puro), além de mostrar exemplos de código para produtor e consumidor.



1. Biblioteca php-rdkafka



php-rdkafka é uma extensão nativa do PHP, baseada na biblioteca librdkafka. Ela oferece desempenho máximo e controle total sobre a configuração do Kafka. Adequada para projetos de produção com alta carga.



Instalação

A instalação requer a presença do librdkafka e do PECL:

# Instalação do librdkafka (Ubuntu/Debian)sudo apt-get install librdkafka-dev

# Instalação da extensão via PECLsudo pecl install rdkafka

# Ativação no php.iniextension=rdkafka.so


Exemplo: Produtor (Producer)

O produtor envia mensagens para um tópico do Kafka. É importante configurar corretamente o envio assíncrono e o tratamento de erros:

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

$conf = new Conf();$conf->set('bootstrap.servers', 'localhost:9092');$conf->set('acks', 'all'); // aguardar confirmação de todas as réplicas

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

// Envio da mensagem$topic->produce(RD_KAFKA_PARTITION_UA, 0, 'Olá Kafka!');$producer->flush(1000); // aguardar entrega (1 seg)

echo "Mensagem enviada";


Exemplo: Consumidor (Consumer)

O consumidor lê mensagens de um tópico. Recomenda-se o uso de grupos de consumidores para balanceamento de 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 "Aguardando mensagens...";while (true) { $message = $consumer->consume(120 * 1000); // timeout de 2 minutos switch ($message->err) { case RD_KAFKA_RESP_ERR_NO_ERROR: echo "Recebido: " . $message->payload . ""; break; case RD_KAFKA_RESP_ERR__PARTITION_EOF: echo "Fim da partição alcançado"; break; case RD_KAFKA_RESP_ERR__TIMED_OUT: echo "Timeout"; break; default: echo "Erro: " . $message->errstr() . ""; break; }}


2. Biblioteca longlang/phpkafka



longlang/phpkafka é uma implementação do protocolo Kafka em PHP puro, sem dependências externas. É mais simples de instalar (não requer compilação) e adequada para desenvolvimento, testes ou projetos com requisitos de desempenho baixos.



Instalação

Instalação via Composer:

composer require longlang/phpkafka


Exemplo: Produtor

<?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', 'Olá Kafka do PHP puro!', 'key-1');echo "Mensagem enviada";


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