无法在 docker 容器外访问 kafka
can't access kafka outside the docker container
我将最新的 HDP 安装到 docker 容器中。
docker ps
>hortonworks/sandbox-proxy:1.0
>hortonworks/sandbox-hdp:3.0.1
Kafka 代理 运行 在 6667 端口 工作正常。
>ssh hdfs@sandbox-hdp.hortonworks.com -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
唯一的问题是我无法访问 docker 容器外的 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也开放了
包含默认流 conf (/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;
}
}
注意:我读到(here)我应该使用advertised.listeners访问医生以外的经纪人:
>listeners=PLAINTEXT://0.0.0.0:6667
>advertised.listeners=PLAINTEXT://172.18.0.2:6667
但我确定我的情况不正确。我可以访问这个网络,问题是某种类型的 Nginx 映射 .
解决方案:
运行以下命令查找hortonworks/sandbox-proxy容器id.
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 端口。
我将最新的 HDP 安装到 docker 容器中。
docker ps
>hortonworks/sandbox-proxy:1.0
>hortonworks/sandbox-hdp:3.0.1
Kafka 代理 运行 在 6667 端口 工作正常。
>ssh hdfs@sandbox-hdp.hortonworks.com -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
唯一的问题是我无法访问 docker 容器外的 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也开放了
包含默认流 conf (/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;
}
}
注意:我读到(here)我应该使用advertised.listeners访问医生以外的经纪人:
>listeners=PLAINTEXT://0.0.0.0:6667
>advertised.listeners=PLAINTEXT://172.18.0.2:6667
但我确定我的情况不正确。我可以访问这个网络,问题是某种类型的 Nginx 映射 .
解决方案:
运行以下命令查找hortonworks/sandbox-proxy容器id.
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 端口。