Не удалось разрешить ‘kafka: 9092’: имя или служба не известны — docker / php-rdkafka

Я пытаюсь подключить php к kafka внутри контейнера докера.

kafka php libhttps://github.com/arnaud-lb/php-rdkafka/

Контейнер для док-станции Кафка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

Я использую следующее в 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");
}
});

Я поиграл, пытаясь установить IP-адрес хоста как в docker-compose.yml, так и в коде PHP, но без радости. У меня тоже было 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?

5

Решение

Брокеры будут рекламировать себя с помощью advertised.listeners (который, кажется, абстрагируется с KAFKA_ADVERTISED_HOST_NAME в этом образе докера), и клиенты, следовательно, будут пытаться подключиться к этим объявленным хостам и портам.

Таким образом, вам необходимо убедиться, что клиент может разрешить и получить доступ к этим объявленным именам хостов, например, добавив «kafka» в / etc / hosts на клиентском хосте.

6

Другие решения

Других решений пока нет …