网上和本人遇到的不太一样:

有几种情况:

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. 1、创建topic

  2. kafka-topics.sh --create --zookeeper zk1:2181 --replication-factor 1 --partitions 1 --topic mytest_topic

  3.  
  4.  
  5. 2、开启生产者:

  6. kafka-console-producer.sh --broker-list kafka1:9092,kafka2:9092... --topic mytest_topic

  7.  

  8.  
  9. 3-1、消费者操作:

  10. kafka-console-consumer.sh --broker-list kafka1:9092,kafka2:9092... --from-beginning --topic mytest_topic

  11. 3-2、也可以这么开启消费者:

  12. 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环境

======================================================================

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐