未能解决'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”。
- Docker:不同端口上的多个PHP7-FPM容器
- 添加用angular色添加创buildmongodb和用户的语法问题
- 没有find应用程序依赖关系清单中指定的程序集:
- 从foo.website.com到localhost的proxy_pass:在docker上使用nginx的xxxx – 在物理机器上不是localhost
- Docker的`docker0`设备反复死亡(`inet addr`消失)
- docker sshd容器使用syslog的Fail2banfilter
- docker上的Powershell远程访问nanoserver
- 从Docker中的另一个微服务调用微服务
- Docker支持 – Google App Engine(Java)