网上和本人遇到的不太一样:
有几种情况:
1.少broker或者broker没有运行:https://www.cnblogs.com/yoyowin/p/13091694.html
2.kafka的IP配置为外网IP,但是外网端口没屏蔽的:https://blog.csdn.net/lsr40/article/details/92789081
本人是运维重启kafka,没有做任何修改,验证是否正常重启时,
1. 启动kafka-console-producer.sh
2.启动kafka-console-consumer.sh
报错:Error while fetching metadata with correlation id 62 : {my_test_topic=LEADER_NOT_AVAILABLE}
但是生产消息和消费消息都正常!启动测试工具大量消费数据也正常!所以这个Error应该是一直存在。看了些资料和本人遇到的都不一样,但是大致是说两个kafka的IP配置
本人kafak配置:
# 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://:9092
# Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured. Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
advertised.listeners=PLAINTEXT://192.168.1.56:9092
第一尝试:把listeners改成主机名,但是重启时报错,重复了。
第二尝试:测试网listeners配的是内网IP,和advertised.listeners相同。这种方式是正常的。
===========================================================================================
以下转栽:https://blog.csdn.net/lsr40/article/details/92789081
[Producer clientId=console-producer] Error while fetching metadata with correlation id 62 : {my_test_topic=LEADER_NOT_AVAILABLE}
我发现有人的报错和我一样,报错就是类似这个:https://www.orchome.com/1108
情况大概是这样的,需要检查几个地方:
1、kafka服务是否正常?
-1.我们kafka服务是通过CM启动的,可以在CM上面查看运行情况(我这个报错,CM上看是正常的)
-2.可以去到具体启动kafka的那几台机器上通过:jps -ml来查看(jps -ml可以查看该broker启动的时候我读取哪个配置文件),这个很关键!因为如果服务用A配置文件启动,结果你改的是B配置文件,就算你把B配置文件改上天了,都不会生效的!!
2、是否是自己的代码或者其他东西写错了?
当你确认服务正常的时候,那么可以使用自带的生产者和消费者来测试,因为这个是可以确保生产者和消费者没问题的一个点(因为你手写的生产者或者消费者代码有可能会有问题啊!!!)
测试命令如下:
-
1、创建topic
-
kafka-topics.sh --create --zookeeper zk1:2181 --replication-factor 1 --partitions 1 --topic mytest_topic
-
2、开启生产者:
-
kafka-console-producer.sh --broker-list kafka1:9092,kafka2:9092... --topic mytest_topic
-
-
3-1、消费者操作:
-
kafka-console-consumer.sh --broker-list kafka1:9092,kafka2:9092... --from-beginning --topic mytest_topic
-
3-2、也可以这么开启消费者:
-
bin/kafka-console-consumer.sh --zookeeper zk1:2181 --topic topic mytest_topic
结果我就是在这一步开启生产者要发数据的时候报错了!!!
3、如何解决该报错?
当我通过前两步确认了你的环境没什么大问题,但是却发送不了数据,我开始静下心来看报错!
1、Error while fetching metadata (获取元数据异常)
2、LEADER_NOT_AVAILABLE (无法获取该topic的leader)
也就是说,很可能是注册在zookeeper上的信息有问题!通过新创建topic,也不能发送消息的情况,我确认了,这个异常跟topic没有什么关系,所以肯定还是broker的问题!
因此我回想起了之前的事情:
【kafka】报错:advertised.listeners参数的重要性(外部访问局域网kafka):https://blog.csdn.net/lsr40/article/details/84135959
这个集群的advertised.listeners参数,还是外网的ip和端口,是不是有可能这个外网ip和端口被运维关掉了的原因,导致节点之间通讯异常,topic选不出leader呢(因为topic是通过leader来与生产者和消费者交互的,这部分知识大家可以自行百度,或者查阅我的kafka的相关文章)
果然经过我的确认,确实那个ip和外网端口已经关闭,所以我将kafka的配置文件进行修改:
advertised.listeners改成内网ip(默认当前机器的ip)
advertised.port改成内网端口(默认9092)
重启kafka服务,就修好了该kafka环境
======================================================================