我有一个关于从docker连接到kafka经纪人的问题。
我的本地计算机上运行着zookeeper和kafka代理。 我有一个使用--network = host在同一本地计算机上运行的docker容器 我想将消息从docker容器内部发送到本地kafka代理。
从docker内部,我可以通过运行以下命令连接到zookeeper并查找现有主题:
./bin/kafka-topics.sh --zookeeper localhost:2181 --list
但是我无法使用kafka-console-consumer.sh
或kafka-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)
有帮助吗?
谢谢
答案 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