【问题标题】:Connecting Kafka inside Docker from another host从另一台主机连接 Docker 内的 Kafka
【发布时间】:2020-12-07 10:54:22
【问题描述】:

我已经在主机 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 端口已经暴露在外面,我可以从 host-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)

但是当我尝试从host-B连接到zookeeper服务器时,它也可以连接并创建主题

[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.

有没有我遗漏的配置?

【问题讨论】:

    标签: docker apache-kafka


    【解决方案1】:

    您正在连接到 OUTSIDE 侦听器 (--bootstrap-server 192.168.1.200:9092),它在您的 KAFKA_ADVERTISED_LISTENERS 中将返回其主机地址为 localhost:9092 - 这是您在此错误中看到的内容,因为客户端随后连接到返回的主机(localhost,Kafka 代理未在其上运行):

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

    您需要为您的拓扑正确配置侦听器。 This article 详细介绍了所有细节。

    【讨论】:

    • 只需在 KAFKA_ADVERTISED_LISTENERS 上将 OUTSIDE://localhost:9092 更改为 OUTSIDE://192.168.1.200:9092 即可,谢谢!
    猜你喜欢
    • 2021-09-24
    • 1970-01-01
    • 2019-08-18
    • 2013-08-05
    • 1970-01-01
    • 2021-03-05
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多