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

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


当前回答

当LEADER_NOT_AVAILABLE错误抛出时,只需重新启动kafka代理:

/bin/kafka-server-stop.sh

紧随其后的是

/bin/kafka-server-start.sh config/server.properties

(注意:Zookeeper必须在这个时候运行,否则它不会工作)

其他回答

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

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

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

我使用docker-compose来构建使用wurstmeister/ Kafka映像的Kafka容器。在docker-compose文件中添加KAFKA_ADVERTISED_PORT: 9092属性为我解决了这个错误。

这个警告(在0.10.2.1中)的另一种可能是,你试图对一个刚刚创建的主题进行投票,而这个主题分区的领导者还不可用,你正在进行领导者选举。

在主题创建和轮询之间等待一秒钟是一种变通方法。

我尝试了这里列出的所有建议。对我有用的是去服务器。属性和添加:

port = 9092
advertised.host.name = localhost 

将监听器和advertised_listeners注释掉。

我让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任务定义中的主机名