从另一台主机连接Docker内部的Kafka



我已经在host-a(192.168.1.200(中的docker内部构建了Kafka和Zookeeper,并且已经将这些环境设置为

KAFKA_ADVERTISED_LISTENERS=INSIDE://kafka-broker:9093,OUTSIDE://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_LISTENERS=INSIDE://kafka-broker:9093,OUTSIDE://kafka-broker:9092
KAFKA_INTER_BROKER_LISTENER_NAME=INSIDE
KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181

然后,当我尝试从其他主机B(IP 192.168.1.8(连接到引导服务器时,无法建立连接。端口9092已经暴露在外部,我可以从主机B远程登录。

[root@node-B kafka]# ./bin/kafka-topics.sh --create --topic hehe --bootstrap-server 192.168.1.200:9092 --partitions 3
[2020-12-07 16:42:22,262] WARN [AdminClient clientId=adminclient-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)

但当我尝试从主机B连接到动物园管理员服务器时,它也可以连接并创建主题

[root@node-B kafka]# ./bin/kafka-topics.sh -zookeeper 192.168.1.200:2181 --create --topic dummytopic --partitions 1 --replication-factor 1
Created topic dummytopic.

我还可以使用引导服务器从主机A创建主题

[root@node-A kafka] #./bin/kafka-topics.sh --bootstrap-server 192.168.1.200:9092 --create --topic testopic --partitions 1 --replication-factor 1
Created topic testopic.

有没有我错过的配置?

您正在连接到OUTSIDE侦听器(--bootstrap-server 192.168.1.200:9092(,该侦听器在KAFKA_ADVERTISED_LISTENERS中会将其主机地址返回为localhost:9092,这就是您在这个错误中看到的,因为客户端随后连接到这个返回的主机(localhost,Kafka broker未在其上运行(:

Connection to node 1 (localhost/127.0.0.1:9092) could not be established.

您需要为您的拓扑结构正确配置侦听器。这篇文章详细介绍了所有的细节。