Ich versuche, PHP-Verbindung zu Kafka alle innerhalb eines Docker-Container zu bekommen.Fehler beim Auflösen von 'kafka: 9092': Name oder Dienst nicht bekannt - docker/php-rdkafka
kafka php lib - https://github.com/arnaud-lb/php-rdkafka/
kafka Docker Behälter-https://hub.docker.com/r/wurstmeister/kafka/
Alles baut und in Ordnung läuft, aber wenn ich versuche, mit der PHP-Hersteller zu verbinden, erhalte ich folgendes:
httpd_1 | %3|1490816385.542|FAIL|rdkafka#producer-1| [thrd:kafka:9092/bootstrap]: kafka:9092/bootstrap: Failed to resolve 'kafka:9092': Name or service not known
httpd_1 | %3|1490816385.543|ERROR|rdkafka#producer-1| [thrd:kafka:9092/bootstrap]: kafka:9092/bootstrap: Failed to resolve 'kafka:9092': Name or service not known
httpd_1 | %3|1490816385.543|ERROR|rdkafka#producer-1| [thrd:kafka:9092/bootstrap]: 1/1 brokers are down
ich verwende die folgenden in PHP
$rk = new RdKafka\Producer();
$rk->setLogLevel(LOG_DEBUG);
$rk->addBrokers("kafka");
$topicConf = new RdKafka\TopicConf();
$topicConf->set("message.timeout.ms", 1000);
$topic = $rk->newTopic("DEV", $topicConf);
$topic->produce(RD_KAFKA_PARTITION_UA, 0, "Message");
$rk->poll(1000);
$kafkaConf = new RdKafka\Conf();
$kafkaConf->setErrorCb(function ($rk, $err, $reason) {
printf("Kafka error: %s (reason: %s)\n", rd_kafka_err2str($err), $reason);
});
$kafkaConf->setDrMsgCb(function ($rk, $message) {
if ($message->err) {
print_r($message);
} else {
print_r("ok");
}
});
Ich habe herum gespielt, versucht, die Host-IP in der docker-compose.yml und der PHP-Code, aber keine Freude. Ich hatte auch connection refused
, aber ich weiß nicht, ob das besser oder schlechter ist?
Wenn es hilft, mein Docker-compose.yml
httpd:
build: .
ports:
- 8180:80
volumes:
- ~/www:/var/www/html
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
build: ~/kafka-docker/.
links:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka
KAFKA_ADVERTISED_PORT: 9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
PHP-Version: 7.0.17
librdkafka Version: 0.9.5.0
php-rdkafka Version : 2.0.1
Meine Frage: Irgendeine Idee, wie ich erfolgreich von PHP mit Kafka verbinden kann?
Danke für die Antwort! Meinst du, der httpd-Container muss "kafka" oder meinen äußeren Hostrechner auflösen können? Docker löst normalerweise alle Dienstnamen in einem Andockfenster auf - komponiert intern als Hostnamen. Dies funktioniert zum Beispiel bei der Verbindung zu einem MySQL-Container von PHP mit dem Namen des MySQL-Container-Dienstes. Ich werde spielen und sehen. – Horse
Der Kafka-Client muss in der Lage sein, die Brokers aufzulösen und zu erreichen, sowohl die Bootstrap-Broker (wie im Client konfiguriert) als auch die angekündigten Hostnamen der Broker. Wenn Ihr PHP-Client von httpd ausgelöst wird, dann muss der httpd-Container/Host in der Lage sein, – Edenhill
zu lösen und zu erreichen. Danke für den Hinweis. Ich habe am Ende einen anderen Docker-Container (flozano/kafka, falls jemand daran interessiert ist) verwendet und dann die Host-IP in der YML-Datei verwendet, aber den XML-Service-Namen, zB 'kafka' im PHP als Broker-Hostnamen verwendet. – Horse