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.soBeispiel: 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/phpkafkaBeispiel: 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 Auch in der Bibliothek
Authentifizierung und Autorisierung in Go (Golang): JWT, OAuth2 und Sessions
CLI-Framework für Rust: Vollständiger Leitfaden zur Entwicklung von Dienstprogrammen
Datenvalidierung in C# (.NET): Bibliotheken und Ansätze
Arbeiten mit ZIP-Archiven in PHP: vollständige Anleitung zu ZipArchive