未能解决'kafka:9092':名称或服务未知 – docker / php-rdkafka

我试图让PHP连接到docker集装箱内的所有卡夫卡。

kafka php lib – https://github.com/arnaud-lb/php-rdkafka/

kafkadocker集装箱 – https://hub.docker.com/r/wurstmeister/kafka/

一切正在build设和运行好,但是当我尝试与PHP生产者连接,我得到以下几点:

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 

我在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"); } }); 

我玩过,试图设置在docker-compose.yml和PHP代码中的主机IP,但没有喜悦。 我也有connection refused但我不知道这是更好还是更糟?

如果有帮助,我的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版本:7.0.17

  • librdkafka版本:0.9.5.0

  • php-rdkafka版本:2.0.1

我的问题:任何想法如何我可以成功地从PHP连接到kafka?

经纪人将使用advertised.listeners(这个docker图像中的KAFKA_ADVERTISED_HOST_NAME被抽象出来)为他们做广告,客户端将尝试连接到这些广告主机和端口。

因此,您需要确保客户端可以parsing并访问此广告主机名,例如,在客户端主机上的/ etc / hosts中添加“kafka”。