kafka-client无法推送消息到kafka集群解决方法
一天,问题处理微信群又亮起了令人恐惧的红点,好吧,又要修bug了。测试说用户接收到不到推送消息了,赶紧查查什么问题。出了问题当然第一时间看服务器日志:
org.apache.kafka.common.errors.TimeoutException: Topic XXX not present in metadata after 60000 ms.
一、按照前人的经验,按如下步骤进行排查:
-
网络是否有问题?简单,使用telnet测试: telnet kafka集群服务器ip地址 9092
结果可以连上,网络没问题,排除这个原因。如果连不上,可能是端口没对外开放。 -
版本问题?kafka是无法向上兼容的(这个改了,从0.10.2.0版本开始双向兼容了)公司kafka服务器集群是2.11-.0.9.0.1,项目pom文件引入的kafka-client是0.9.0.1,按理来说肯定没问题。排除。 -
难道是kafka集群炸了?测试一下知道,cd到kafka bin目录下:
./kafka-console-producer.sh --broker-list 192.168.7.100:9092 --topic topic名
./kafka-console-consumer.sh --zookeeper localhost:12181 --topic topic名 --from-beginning
创建之后在消息发布者窗口发送消息,订阅者可以接收到消息。好吧kafka集群也没问题。 -
难道是kafka-client配置不对?认真对了一遍,也没什么问题,网上有人试过kafka偶尔能接收到信息,偶尔接受不到,是因为partition分区数配置错了。我这是一直接收不到信息,分区数也没弄错。排除。
排查了好久,各种百度,也找不到是什么原因。但是,我是那么容易放弃的人吗(卑微打工人没有放弃的资质/(ㄒoㄒ)/~~),成功激发了我的斗志,我要放大招了!!! 找到了公司架构师,大佬,求求你教教我这题怎么做(QqQ)。大佬说这很有可能是版本的问题,你是去服务器上把jar包下下来,看看里面的kafka-client是哪个版本的 。我是懵逼的,还能有这种问题?本地工程里maven导入的kafka-client就是0.9.0.1版本的,用jenkins打包部署到sit服务器上的还能有不同的吗?把jar下下来一看,好家伙,kafka-client居然是2.11!!!问题找到了!!! 二、解决问题 第一次遇到这么奇葩的问题,按照项目的pom文件配置,在公司的仓库里拉取的是0.9版本的,但是sit环境上通过jenkins打包拉取到的确实2.11版本的。太坑了。产生这个原因应该是这项目的其他子项目也到了kafka-client-2.11,我配置的kafka依赖没起效。 这就是maven的依赖原则问题了,根据路径最短原则,修改了kafka-client依赖的的声明位置。重新打包,问题解决!!!困扰我好几天的问题终于解决了。。。
|