繁体   English   中英

无法从本地 docker 容器连接到我的本地 kafka 代理

[英]failed to connect to my local kafka broker from a local docker container

我有一个关于从 docker 连接到 kafka broker 的问题。

我在本地机器上运行了 zookeeper 和 kafka 代理。 我有一个 docker 容器在同一台本地机器上运行 -.network=host 我想从 docker 容器内部向我的本地 kafka 代理发送消息。

从 docker 内部,我可以连接到 zookeeper 并通过运行查找现有主题:./bin/ ./bin/kafka-topics.sh --zookeeper localhost:2181 --list

但是我无法使用kafka-console-consumer.shkafka-console-producer.sh连接到 kafka 代理,

通过运行: bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test我得到:

[2019-10-17 19:12:04,097] WARN [Consumer clientId=consumer-1, groupId=console-consumer-99825] Error connecting to node aictjt:9092 (id: 0 rack: null) (org.apache.kafka.clients.NetworkClient)
java.net.UnknownHostException: aictjt
at java.net.InetAddress.getAllByName0(InetAddress.java:1281)
at java.net.InetAddress.getAllByName(InetAddress.java:1193)
at java.net.InetAddress.getAllByName(InetAddress.java:1127)
at org.apache.kafka.clients.ClientUtils.resolve(ClientUtils.java:104)
at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.currentAddress(ClusterConnectionStates.java:403)
at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.access$200(ClusterConnectionStates.java:363)
at org.apache.kafka.clients.ClusterConnectionStates.currentAddress(ClusterConnectionStates.java:151)
at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:943)
at org.apache.kafka.clients.NetworkClient.access$600(NetworkClient.java:68)
at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:1114)
at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:1005)
at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:537)
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:262)
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:233)
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:224)
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.awaitMetadataUpdate(ConsumerNetworkClient.java:161)
at org.apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureCoordinatorReady(AbstractCoordinator.java:259)
at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.poll(ConsumerCoordinator.java:326)
at org.apache.kafka.clients.consumer.KafkaConsumer.updateAssignmentMetadataIfNeeded(KafkaConsumer.java:1251)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1216)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1201)
at kafka.tools.ConsoleConsumer$ConsumerWrapper.receive(ConsoleConsumer.scala:439)
at kafka.tools.ConsoleConsumer$.process(ConsoleConsumer.scala:105)
at kafka.tools.ConsoleConsumer$.run(ConsoleConsumer.scala:77)
at kafka.tools.ConsoleConsumer$.main(ConsoleConsumer.scala:54)
at kafka.tools.ConsoleConsumer.main(ConsoleConsumer.scala)

有什么帮助吗?

谢谢

我找到的解决方案是:

在 kafka/config/server.properties

设置listeners=PLAINTEXT://localhost:9092 ,注意默认listeners=PLAINTEXT://:9092在某些情况下有效,但是对于这台特定的机器,我必须将localhost放在那里。

使用更新的配置重新运行 kafka 代理。

并且连接在我的 docker 容器内部工作(使用 --network=host)。

上述解决方案对我不起作用。 花了一些时间后,我发现问题是因为 zookeeper 和 kafka 实例没有在我的本地运行。 这个 ans 在 mac 上测试过,但我认为它适用于所有平台

如果您通过自制软件安装了 zookeeper 和 kafka,那么:

首先通过运行命令在本地运行 zookeeper:

zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties

然后运行

kafka-server-start /usr/local/etc/kafka/server.properties

在此之后,kafka 的命令将运行而不会出现错误

java.net.UnknownHostException: aictjt

例如

kafka-topics --list --bootstrap-server localhost:9092

对于那些没有安装自制软件的人:

使用安装了 kafka 的根目录打开终端

./bin/zookeeper-server-start.sh /usr/local/etc/kafka/zookeeper.properties
./bin/kafka-server-start.sh /usr/local/etc/kafka/server.properties

在此之后,kafka 的命令将运行而不会出现错误

java.net.UnknownHostException: aictjt

例如

./bin/kafka-topics.sh --list --bootstrap-server localhost:9092

本地 docker 容器抛出“java.net.UnknownHostException”的原因是,它无法连接到 kafka 代理。 这是连接问题。

如果您按照以下步骤操作,它将起作用,

  • 在 kafka/config/server.properties 中,有 "listener" 行,默认情况下会被注释掉。 即 listeners=PLAINTEXT://localhost:9092。 取消注释这一行。
  • 稍后重新启动 kafka broker 和 zookeeper。

注意:在非本地环境中,如果您是第一次设置 stream,并且面临类似的问题来连接到代理并观察到 UnknownHostException。 尝试重新启动代理和动物园管理员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM