не могу получить доступ к kafka вне контейнера докеров

Я установил последнюю версию HDP в контейнер докеров.

docker ps
>hortonworks/sandbox-proxy:1.0
>hortonworks/sandbox-hdp:3.0.1

Брокер Kafka работает на порту 6667 и работает нормально.

   >ssh [email protected] -p 2222
   > echo "send test message" | kafka-console-producer.sh --broker-list sandbox-hdp.hortonworks.com:6667 --topic hotelReservation > /dev/null
   >kafka-console-consumer.sh   --bootstrap-server sandbox-hdp.hortonworks.com:6667 --topic test --from-beginning

Единственная проблема в том, что у меня нет доступа к брокеру Kafka за пределами контейнера докеров.

Дополнительная информация по устранению неполадок:

Я проверил, что все порты открыты локальная машина -> прокси -> hdp

Сервер HDP:

      hostname -I
      172.18.0.2

      netstat -vatn | grep 6667
      tcp        0      0 172.18.0.2:6667         0.0.0.0:*               LISTEN

Прокси-сервер

  hostname -I
  172.18.0.3

  nmap 172.18.0.2 -p 6667
  6667/tcp open  irc

  netstat -vatn | grep 6667
  tcp        0      0 0.0.0.0:6667            0.0.0.0:*               LISTEN

Моя локальная машина:

nmap sandbox-hdp.hortonworks.com -p 6667
    Host is up (0.000064s latency).
    rDNS record for 127.0.0.1: localhost
    PORT     STATE SERVICE
    6667/tcp open  irc

Примечание: 6668 тоже открыт.

включена конфигурация потока по умолчанию (/etc/nginx/conf/stream.d/tcp-hdp.conf):

server {
  listen 6668;
  proxy_pass sandbox-hdp:6667;
}

Поэтому я решил создать новую конфигурацию http: /etc/nginx/conf/stream.d/tcp-hdp.conf.

server {
  listen 6667;
  server_name sandbox-hdp.hortonworks.com;
  location / {
    proxy_pass http://sandbox-hdp:6667;
  }
}

Примечание. я прочитал (здесь), что я следует использовать ads.listeners для доступа к брокеру вне доктора:

>listeners=PLAINTEXT://0.0.0.0:6667
>advertised.listeners=PLAINTEXT://172.18.0.2:6667

но я уверен, что это неправильно для моего случая. У меня есть доступ в эту сеть, проблема в каком-то типе сопоставления только Nginx.


person grep    schedule 20.12.2019    source источник
comment
Из вашего вопроса следует, что вы используете nginx, но не совсем понятно, как и почему? Если вы хотите получить доступ к брокеру Kafka по сети, вам необходимо правильно настроить рекламные прослушиватели: rmoff.net/2018/08/02/kafka-listeners-explained   -  person Robin Moffatt    schedule 20.12.2019
comment
Это стандартная архитектура Hortonworks Data Platform (HDP).   -  person grep    schedule 20.12.2019
comment
Я добавил ads.listeners=sandbox-hdp.hortonworks.com:6667 в опции пользовательского брокера kafka пользовательского интерфейса Ambari. Я также включил 6667/2181 внутри http-conf хоста HDP. файл, proxy-deploy.sh, но порты открыты, если я подключаюсь к ним по телнету из хост-ОС Windows (мои настройки Virtualbox - NAT, для них открыты порты правил переадресации), я все еще не могу использовать сообщение от Kafka в HDP, я использовал единственное доменное имя sandbox-hdp.hortonworks.com:6667, кто-нибудь поможет? Прошел месяц, и это действительно расстраивает!   -  person yuzhen    schedule 02.07.2020


Ответы (1)


Решение:

Выполните следующую команду, чтобы найти идентификатор контейнера hortonworks/sandbox-proxy.

docker ps

Войдите на прокси-сервер

docker exec -it CONTAINER_ID /bin/bash

добавить новое сопоставление в nginx

cd /etc/nginx/conf.stream.d
vim tcp-hdp.conf

конфигурация:

server {
  listen 6667;
  proxy_pass sandbox-hdp:6667;
}

перезагрузить сопоставление nginx:

/etc/init.d/nginx reload

Тест:

> ./kafka-console-consumer.sh --bootstrap-server localhost:6668 --topic topicName --from-beginning
> echo "msg" | ./kafka-console-producer.sh --broker-list sandbox-hdp.hortonworks.com:6668 --topic topicName > /dev/nul

Проблема заключалась в том, что отсутствовало сопоставление 6667:6667. Теперь брокеры имеют доступ как к портам 6667, так и к портам 6668.

person grep    schedule 20.12.2019
comment
Большое спасибо, вы спасли мой день. Просто из любопытства я попытался получить доступ к ./kafka-consumer-groups.sh --list --bootstrap-server localhost:6668 перед добавлением 6667:6667, но не понял, почему. Даже после добавления 6667:6667 не работает ./kafka-consumer-groups.sh --list --bootstrap-server localhost:6668 работает только kafka-consumer-groups.sh --list --bootstrap-server localhost:6667 - person Rahil; 14.08.2020