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.soExemplo: 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/phpkafkaExemplo: 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 Também na biblioteca
Trabalho com XML em PHP: parsing, criação e processamento de dados
Configuração de aplicações Rust: bibliotecas config, envy e dotenvy
Vision para Swift: guia completo com exemplos práticos
Trabalhando com CSV em Go (Golang): guia completo do pacote encoding/csv