【问题标题】:failed to connect to my local kafka broker from a local docker container无法从本地 docker 容器连接到我的本地 kafka 代理
【发布时间】:2020-02-14 18:48:33
【问题描述】:

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

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

从 docker 内部,我可以连接到 zookeeper 并通过运行以下命令查找现有主题: ./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)

有什么帮助吗?

谢谢

【问题讨论】:

标签: docker apache-kafka


【解决方案1】:

我找到的解决方案是:

在 kafka/config/server.properties 中

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

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

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

【讨论】:

  • advertised.listeners 将是更正确的更改设置。否则,您已将代理锁定为仅在本地侦听,而无法从远程计算机访问(如果需要)。
【解决方案2】:

上述解决方案对我不起作用。 花了一些时间后,我发现问题是因为 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

【讨论】:

    【解决方案3】:

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

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

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

    注意:在非本地环境中,如果您是第一次设置流,并且遇到类似问题连接到代理并观察 UnknownHostException。尝试重启 broker 和 zookeeper。

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 2019-12-19
      • 2017-10-03
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      相关资源
      最近更新 更多