首页 > 解决方案 > 在本地主机上设置 Kafka 的问题

问题描述

我在尝试在本地计算机上设置 kafaka(版本 2.12-2.4.0)时遇到了一个问题: https ://kafka.apache.org/quickstart

通过遵循一些在线教程,我创建了一个非常简单的 spring-boot 应用程序,它有一个生产者和消费者。当我启动我的应用程序时,它会旋转 30 秒,然后开始在日志中抛出错误,试图创建一个带有连接错误的主题。

我想也许我的 spring-boot 应用程序配置错误,所以我尝试从命令行创建一个主题,但我遇到了类似的错误:

bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic testing

Error while executing topic command : org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.
[2020-02-11 21:57:06,545] ERROR java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.
    at org.apache.kafka.common.internals.KafkaFutureImpl.wrapAndThrow(KafkaFutureImpl.java:45)
    at org.apache.kafka.common.internals.KafkaFutureImpl.access$000(KafkaFutureImpl.java:32)
    at org.apache.kafka.common.internals.KafkaFutureImpl$SingleWaiter.await(KafkaFutureImpl.java:89)
    at org.apache.kafka.common.internals.KafkaFutureImpl.get(KafkaFutureImpl.java:260)
    at kafka.admin.TopicCommand$AdminClientTopicService.createTopic(TopicCommand.scala:225)
    at kafka.admin.TopicCommand$TopicService.createTopic(TopicCommand.scala:194)
    at kafka.admin.TopicCommand$TopicService.createTopic$(TopicCommand.scala:189)
    at kafka.admin.TopicCommand$AdminClientTopicService.createTopic(TopicCommand.scala:217)
    at kafka.admin.TopicCommand$.main(TopicCommand.scala:61)
    at kafka.admin.TopicCommand.main(TopicCommand.scala)
Caused by: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.

Kafka 和 zookeeper 已启动并运行,但没有任何东西可以连接到 kafka。

标签: apache-kafka

解决方案


我注意到 kafka 日志说它正在监听 0.0.0.0:9092:

INFO Awaiting socket connections on 0.0.0.0:9092. (kafka.network.Acceptor)

我进入 server.properties 并将所有 localhost 值更改为:

# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
#   FORMAT:
#     listeners = listener_name://host_name:port
#   EXAMPLE:
#     listeners = PLAINTEXT://your.host.name:9092
listeners=PLAINTEXT://127.0.0.1:9092

这解决了问题。我不知道这是否是我的笔记本电脑的问题,但我想节省其他人的时间。我不必更改我的 spring-boot 连接配置,连接到 localhost 仍然有效。


推荐阅读