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

时间:2019-10-17 19:29:38

标签: docker apache-kafka

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

我的本​​地计算机上运行着zookeeper和kafka代理。 我有一个使用--network = host在同一本地计算机上运行的docker容器 我想将消息从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)

有帮助吗?

谢谢

2 个答案:

答案 0 :(得分:0)

我找到的解决方案是:

在kafka / config / server.properties中

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

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

连接从我的docker容器内部进行(使用--network = host)。

答案 1 :(得分:0)

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