Hor*_*rse 7 php apache-kafka docker
我想在一个docker容器中将php连接到kafka.
kafka php lib - https://github.com/arnaud-lb/php-rdkafka/
kafka docker container - https://hub.docker.com/r/wurstmeister/kafka/
一切都在构建并运行正常,但是当我尝试与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
Run Code Online (Sandbox Code Playgroud)
我在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");
}
});
Run Code Online (Sandbox Code Playgroud)
我玩过,尝试在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
Run Code Online (Sandbox Code Playgroud)
PHP版本:7.0.17
librdkafka版本:0.9.5.0
php-rdkafka版本:2.0.1
我的问题:我知道如何从php成功连接到kafka?
Ede*_*ill 11
经纪人将使用advertised.listeners(在该docker镜像中使用KAFKA_ADVERTISED_HOST_NAME抽象出来)宣传他们,然后客户端将尝试连接到这些广告主机和端口.
因此,您需要确保客户端可以解析并访问此广告主机名,例如通过在客户端主机上的/ etc/hosts中添加"kafka".
如果容器的主机IP是192.168.1.110,可以在docker容器环境中设置它:
KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://192.168.1.110:{{ kafka_port }}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6376 次 |
| 最近记录: |