我试着用卡夫卡。 所有配置都正确完成,但当我试图从控制台产生消息时,我一直得到以下错误

WARN Error while fetching metadata with correlation id 39 : 
     {4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

Kafka版本:2.11-0.9.0.0


当前回答

上述答案中提到的广告听众可能是原因之一。其他可能的原因有:

主题可能还没有创建。你可以使用bin/kafka-topics——list——zookeeper <zookeeper ip>:<zookeeper port>来检查 检查您提供给生成器以获取元数据的引导服务器。如果引导服务器不包含关于主题的最新元数据(例如,当它丢失其zookeeper声明时)。您必须添加多个引导服务器。

另外,确保已将所发布的侦听器设置为IP:9092而不是localhost:9092。后者意味着只能通过本地主机访问代理。

当我遇到错误时,我记得在引导服务器(或代理列表)列表中使用了PLAINTEXT://<ip>:<PORT>,它工作了,奇怪的是。

bin/kafka-console-producer --topic sample --broker-list PLAINTEXT://<IP>:<PORT>

其他回答

我让kafka作为Docker容器运行,类似的消息充斥在日志中。 KAFKA_ADVERTISED_HOST_NAME被设置为'kafka'。

在我的例子中,错误的原因是在“kafka”容器本身中缺少“kafka”的/etc/hosts记录。 因此,例如,在'kafka'容器中运行ping kafka将失败,使用ping: bad address 'kafka'

在Docker中,这个问题可以通过指定容器的主机名来解决。

实现它的选项:

Docker run——hostname… Docker运行-add-host… docker-compose中的主机名 AWS EC2任务定义中的主机名

当我们试图订阅一个尚未创建的主题时,我们往往会收到这条消息。我们通常依赖于在部署环境中预先创建的主题,但我们有针对dockerized kafka实例运行的组件测试,每次都干净启动。

在这种情况下,我们在测试设置中使用AdminUtils来检查主题是否存在,如果不存在就创建它。有关设置AdminUtils的更多信息,请参阅另一个堆栈溢出。

对于我来说,我没有为Kafka实例指定代理id。 当它在Docker环境中重启时,有时会从zookeeper获取一个新的id。 如果您的代理id大于1000,只需指定环境变量KAFKA_BROKER_ID。

使用它可以查看代理、主题和分区。

brew install kafkacat
kafkacat -b [kafka_ip]:[kafka_poot] -L

我也得到了同样的错误消息

获取关联id为39的元数据时出错: {4-3-16-topic1 = LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

解决步骤:

去C:\Windows\System32\drivers\etc\hosts 如果下面的行不存在,那么将它添加到hosts文件的末尾

127.0.0.1       localhost

打开C:\<Kafka_Config_Path>\server。属性,并在文件末尾添加

    advertised.listeners = PLAINTEXT://localhost:9092
    listeners = PLAINTEXT://0.0.0.0:9092

重新启动Kafka服务器

加上这个,因为它可能会帮助其他人。一个常见的问题可能是advertised.host.name配置错误。在Docker中,使用Docker -compose设置KAFKA_ADVERTISED_HOST_NAME中的服务名称将不起作用,除非你也设置了主机名。docker-compose。yml例子:

  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    hostname: kafka
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

上面没有hostname: kafka可以在尝试连接时发出一个LEADER_NOT_AVAILABLE。 您可以在这里找到一个工作docker-compose配置的示例