我想用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条答案
按热度按时间whitzsjs1#
我尝试了这里列出的所有建议。对我有用的是
server.properties
并添加:离开
listeners
以及advertised_listeners
评论道。z9zf31ra2#
上述答案中提到的广告听众可能是原因之一。其他可能的原因有:
主题可能尚未创建。你可以使用
bin/kafka-topics --list --zookeeper <zookeeper_ip>:<zookeeper_port>
检查您提供给生产者的引导服务器以获取元数据。如果引导服务器不包含关于主题的最新元数据(例如,当它丢失了zookeeper声明时)。必须添加多个引导服务器。另外,请确保将播发的侦听器设置为
IP:9092
而不是localhost:9092
. 后者意味着代理只能通过localhost访问。当我遇到错误时,我记得
PLAINTEXT://<ip>:<PORT>
在引导服务器列表(或代理列表)中,它工作得很奇怪。j2qf4p5b3#
我让Kafka作为一个docker容器运行,类似的消息充斥着日志。
以及
KAFKA_ADVERTISED_HOST_NAME
设置为“Kafka”。就我而言,错误的原因是
/etc/hosts
在“kafka”容器中记录“kafka”。例如,跑步
ping kafka
“kafka”容器内部会出现故障ping: bad address 'kafka'
对于docker来说,这个问题可以通过指定hostname
对于容器。实现这一目标的选择:
docker run --hostname ...
docker run -it --add-host ...hostname
在docker compose中hostname
在aws ec2任务定义中q3aa05254#
因为我想让我的kafka经纪人与远程生产者和消费者建立联系,所以我不想
advertised.listener
被注解掉。在我的例子中,(在kubernetes上运行kafka),我发现我的kafka pod没有被分配任何集群ip。通过移除线路clusterIP: None
从services.yml,kubernetes为kafka pod分配一个内部ip。这解决了我的问题,领导不可用,也远程连接Kafka生产者/消费者。nhaq1z215#
如果您在本地计算机上运行kafka,请尝试用以下行更新$kafka\u dir/config/server.properties:
listeners=PLAINTEXT://localhost:9092
然后重启Kafka。2w3rbyxf6#
我用的是Kafka2.12-0.10.2.1:
vi config/server.properties
添加以下行:无需更改advanced.listeners,因为它从std listener属性获取值。
代理将向生产者和消费者公布主机名和端口。如果未设置,
如果已配置,它将使用“侦听器”的值
否则,它将使用
java.net.InetAddress.getCanonicalHostName()
.阻止Kafka经纪人:
重新启动代理:
现在你不应该看到任何问题。
00jrzges7#
试试这个听众=plaintext://localhost:9092一定很有用
非常感谢
h43kikqp8#
对我来说,我没有为kafka示例指定代理id。它在docker环境中重新启动时,有时会从zookeeper处获得一个新的id。如果代理id大于1000,只需指定环境变量
KAFKA_BROKER_ID
.使用它可以查看代理、主题和分区。
lx0bsm1f9#
当leader\u not\u available错误抛出时,只需重新启动kafka代理:
然后
(注意:zookeeper必须在此时运行,如果您以其他方式运行它将不起作用)
gzjq41n410#
对我来说,这是因为配置失误
码头码头(9093)
kafka命令端口“bin/kafka-console-producer.sh--代理列表localhost:9092 --topic “主题名”
我检查了配置以匹配端口,现在一切正常
vbopmzt111#
对我来说,原因是使用了一个特定的Zookeeper,这不是Kafka的一部分。这台zookeeper已经安装在机器上用于其他目的。显然,Kafka并不是和任何Zookeeper一起工作的。换成Kafka带来的Zookeeper帮我解决了这个问题。为了不与现有的zookeeper冲突,我必须修改配置,让zookeeper在不同的端口上侦听:
tjrkku2a12#
当我们尝试订阅尚未创建的主题时,往往会收到此消息。我们通常依赖于在部署的环境中预先创建的主题,但是我们有针对停靠的kafka示例运行的组件测试,该示例每次启动时都是干净的。
在这种情况下,我们在测试设置中使用adminutils检查主题是否存在,如果不存在,则创建主题。有关设置管理员的更多信息,请参阅另一个堆栈溢出。
5cg8jx4n13#
这可能与
advertised.host.name
设置在您的server.properties
.可能发生的情况是,您的制作者试图找出谁是给定分区的负责人,并找出其原因
advertised.host.name
以及advertised.port
试着联系。如果未正确配置这些设置,则可能认为引线不可用。qq24tv8q14#
如果重复出现这样的错误消息:
或
然后,您需要在kafka server.properties中配置如下侦听器设置:
这是在apacke kafka 2.5.0和confluent platform 5.4.1上尝试的解决方案。
h5qlskok15#
我知道这是张贴很久以前,我想分享我如何解决它。
因为我有我的办公室笔记本电脑(vpn和代理配置)。
我检查了环境变量no\u proxy
它返回空值
现在我已经用localhost和127.0.0.1设置了no\u代理
如果要附加到现有值,则
在这之后,我重新启动了Zookeeper和Kafka
很有魅力