返回到文章

采纳

编辑于

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

kafka

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