Arbeit mit Kafka in PHP: Bibliotheken, Installation und Codebeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeit mit Kafka in PHP: Überblick über Bibliotheken und praktische Beispiele



Apache Kafka ist eine verteilte Plattform für die Datenstromverarbeitung, die sich zum De-facto-Standard für den Aufbau hochbelastbarer Nachrichtenaustauschsysteme entwickelt hat. Im PHP-Ökosystem ist die Integration mit Kafka über mehrere Bibliotheken möglich, die jeweils ihre eigenen Besonderheiten haben. In diesem Artikel betrachten wir zwei Hauptbibliotheken: php-rdkafka (C-Erweiterung) und longlang/phpkafka (reines PHP) und zeigen Codebeispiele für Producer und Consumer.



1. Bibliothek php-rdkafka



php-rdkafka ist eine native PHP-Erweiterung, die auf der Bibliothek librdkafka basiert. Sie bietet maximale Leistung und vollständige Kontrolle über die Kafka-Konfiguration. Geeignet für Production-Projekte mit hoher Last.



Installation

Die Installation erfordert librdkafka und PECL:

# Installation von librdkafka (Ubuntu/Debian)sudo apt-get install librdkafka-dev

# Installation der Erweiterung über PECLsudo pecl install rdkafka

# Aktivierung in php.iniextension=rdkafka.so


Beispiel: Producer

Der Producer sendet Nachrichten an ein Kafka-Topic. Wichtig ist die korrekte Konfiguration des asynchronen Versands und der Fehlerbehandlung:

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

$conf = new Conf();$conf->set('bootstrap.servers', 'localhost:9092');$conf->set('acks', 'all'); // Warten auf Bestätigung von allen Replikaten

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

// Nachricht senden$topic->produce(RD_KAFKA_PARTITION_UA, 0, 'Hallo Kafka!');$producer->flush(1000); // Warten auf Zustellung (1 Sek.)

echo "Nachricht gesendet";


Beispiel: Consumer

Der Consumer liest Nachrichten aus einem Topic. Es wird empfohlen, Konsumentengruppen zur Lastverteilung zu verwenden:

<?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 "Warte auf Nachrichten...";while (true) { $message = $consumer->consume(120 * 1000); // Timeout 2 Minuten switch ($message->err) { case RD_KAFKA_RESP_ERR_NO_ERROR: echo "Erhalten: " . $message->payload . ""; break; case RD_KAFKA_RESP_ERR__PARTITION_EOF: echo "Ende der Partition erreicht"; break; case RD_KAFKA_RESP_ERR__TIMED_OUT: echo "Timeout"; break; default: echo "Fehler: " . $message->errstr() . ""; break; }}


2. Bibliothek longlang/phpkafka



longlang/phpkafka ist eine Implementierung des Kafka-Protokolls in reinem PHP ohne externe Abhängigkeiten. Sie ist einfacher zu installieren (keine Kompilierung erforderlich) und eignet sich für Entwicklung, Tests oder Projekte mit geringeren Leistungsanforderungen.



Installation

Installation über Composer:

composer require longlang/phpkafka


Beispiel: Producer

<?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', 'Hallo Kafka aus reinem PHP!', 'key-1');echo "Nachricht gesendet";


Beispiel: Consumer

<?phpuse longlang\\phpkafka\\Consumer\\Consumer;use longlang\\phpkafka\\Consumer\\ConsumerConfig;

$config = new ConsumerConfig();$config->setBootstrapServer('localhost:9092');$config->setGroupId('my-group');$config->setTopic('te

Empfehlungen