我想用Kafka。
所有的配置都做得很好,但是当我试图从控制台生成消息时,我总是得到以下错误
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
我想用Kafka。
所有的配置都做得很好,但是当我试图从控制台生成消息时,我总是得到以下错误
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
25条答案
按热度按时间0yg35tkg16#
对于任何试图在Kubernetes身上运行Kafka并遇到这个错误的人来说,这就是最终为我解决这个问题的原因:
你必须:
添加
hostname
按照吊舱的规格,这样Kafka才能找到自己。或
如果使用
hostPort
,那么你需要hostNetwork: true
以及dnsPolicy: ClusterFirstWithHostNet
原因是kafka需要与自己对话,它决定使用“广告”侦听器/主机名来查找自己,而不是使用localhost。即使您有一个将播发的主机名指向pod的服务,也无法从pod中看到它。我真的不知道为什么会这样,但至少有一个解决办法。gz5pxeao17#
在我的情况下,它在家里运行良好,但在办公室,当我连接到办公网络的那一刻,它就失败了。
因此将config/server.properties listeners=plaintext://:9092修改为listeners=plaintext://localhost:9092
在我的例子中,我在描述消费者群体时
beq87vna18#
下面这一行是我加进去的
config/server.properties
,解决了我的问题类似于上述问题。希望这有帮助,它在server.properties文件中有很好的文档记录,请在修改此文件之前阅读并理解。advertised.listeners=PLAINTEXT://<your_kafka_server_ip>:9092
nkoocmlb19#
此警告的另一种可能性(在0.10.2.1中)是,您尝试对刚刚创建的主题进行投票,而此主题分区的领导人还不可用,您正在进行领导人选举。
在主题创建和轮询之间等待一秒钟是一种解决方法。
wn9m85ua20#
我正在使用docker compose构建kafka容器,使用
wurstmeister/kafka
形象。添加KAFKA_ADVERTISED_PORT: 9092
我的财产docker-compose
文件为我解决了这个错误。11dmarpk21#
加上这个,因为它可以帮助别人。一个常见的问题可能是对
advertised.host.name
. docker使用docker compose设置内部服务的名称KAFKA_ADVERTISED_HOST_NAME
除非你也设置主机名,否则不会工作。docker-compose.yml
例子:以上没有
hostname: kafka
可以发布LEADER_NOT_AVAILABLE
尝试连接时。你可以找到一个工作的例子docker-compose
此处配置wbrvyc0a22#
在config目录下的server.properties文件中添加侦听器设置后,问题得到解决。听众=plaintext://localhost(或您的服务器):9092在此更改后重新启动kafka。版本2.11
toiithl623#
在过去的两周里,我和Kafka一起工作的时候也看到过同样的问题,从那以后我一直在读这个stackoverflow的帖子。
经过两周的分析,我推断在我的例子中,这种情况发生在试图向一个不存在的主题生成消息时。
在我的例子中,结果是Kafka发回了一个错误消息,但同时创建了以前不存在的主题。因此,如果在此事件之后再次尝试生成指向该主题的任何消息,则错误将不再显示为已创建的主题。
请注意:这可能是我的Kafka安装配置为自动创建主题时,相同的不存在;这应该可以解释为什么在我的例子中,在重置主题之后,每个主题只能看到一次问题:您的配置可能不同,在这种情况下,您会不断收到相同的错误。
当做,
卢卡坦佩利尼
ha5z0ras24#
对于那些挣扎于Kafkassl设置和看到这个领导人不可用的错误。可能被破坏的原因之一是密钥库和信任库。在密钥库中,需要有服务器的私钥+已签名的服务器证书。在客户机信任库中,您需要具有中介ca证书,以便客户机可以对kafka服务器进行身份验证。如果要使用ssl进行代理间通信,则还需要在代理的server.properties中设置此信任库,以便它们可以相互验证。
最后一段我被错误地遗漏了,让我花了好几个小时才发现这个领导不可用的错误可能意味着什么。希望这能帮助别人。
rn0zuynd25#
对我来说,解决这个问题的办法是让听众这样:
这使得kafka代理侦听所有接口。