kafka.tools.GetOffsetShell显示部分partition消息offset为空

宁静志远 发表于: 2019-10-15   最后更新时间: 2019-10-18 10:58:19   3,806 游览

kafka broker 0 因为与zookeeper连接失败被探针重启,启动后使用kafka.tools.GetOffsetShell查询offset,部分分区显示为,导致消费者报错Received unknown topic or partition error in ListOffset request for partition

$ kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list kafka-hs:9093 --topic topic_test --time -1
topic_test:23:3272
topic_test:32:
topic_test:41:3270
topic_test:59:
topic_test:50:3255
topic_test:53:3269
topic_test:35:
topic_test:44:3281
...

譬如上面这个topic,32、59、35分区的消息offset(不是消费者offset)显示为空,经查询这些partition的leader都在kafka-0上,而且这些partition并不是kafka-0为leader的所有partition,也就是部分partition的leader为kafka-0,但是它们显示正常。

重启kafka-0后所有partition显示正常。

$ kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list kafka-hs:9093 --topic topic_test --time -1
topic_test:23:3272
topic_test:32:3274
topic_test:41:3270
topic_test:59:3196
topic_test:50:3255
topic_test:53:3269
topic_test:35:3201
topic_test:44:3281
...

猜测是kafka index数据损坏,但是kafka-0重启之后又加载正常了,似乎不是数据损坏问题。

请问大家,kafka.tools.GetOffsetShell显示为空的机制是什么?不知有没有朋友研究过源码。

当前使用的kafka版本为1.1.0,zookeeper版本为3.4.12

发表于 2019-10-15
添加评论

部分显示为空,这个部分,应该是broker-0的部分。
(ps:图片不能上传,我测试了没问题...好像firefox不支持)

宁静志远 -> 半兽人 5年前

确实是broker-0中部分partition的offset显示为空,请问显示为空的内部机制是什么?
原以为是数据损坏,但是重启broker-0之后,offset显示正常了,说明不是数据损坏。

半兽人 -> 宁静志远 5年前

查询的是__consumer_offsets的信息,你看下你的__consumer_offsets有没有副本。
不然一旦存储__consumer_offsets的kafka节点宕了,就都不行了

宁静志远 -> 半兽人 5年前

哥,我刚刚更新了一下问题。查询的不是__consumer_offsets这个topic,而是一个业务topic的消息offset,麻烦帮忙看一下,感谢

你的答案

查看kafka相关的其他问题或提一个您自己的问题