【日更挑战】解决Kafka的Offset越界问题(未完)

2021-07-04  本文已影响0人  扁圆柱体

日更挑战当前排名:第93天,第3104名,较昨日前进31名。

最近折腾公司的大数据平台,遇到了一个Kafka的消费者消费时无法正常启动,报afka.common.OffsetOutOfRangeException的错误。俗称就是Offset的数组越界。

其实到撰文的时候,问题还未解决,先把之前的思路理一理。

根据网上的教程,先查看当前我们这个topic有几个分区,具体命令如下

$ {KAFKA_HOME}/bin/kafka-topics --zookeeper localhost:2181 --topic TEST_TOPIC --describe

查出来目前是6个分区(0-5)。同时由于kafka的broker有4个,会发现每个分区都有两个broker承载数据,其中一个为leader。

其次看zookeeper中对应的offset位移是多少。这里比较奇怪的是,我只能在/brokers/topics/TEST_TOPIC/partitions/0(0可替换为1-5)中找到offset。而不是如网上说的在consumer/消费者组这个路径下。另外在以上路径中,看到值为null,所以尝试找到正确的offset并重置。

这时通过两个途径找,首先是看目录。从Kafka的配置里找到log.dirs,再去各个broker中找这个参数指定的目录,注意不是每个broker都有所有的分区数据,我这边一个broker基本有3个分区,或者作为leader,或者作为replica。

某个分区日志记录

这里其实分辨不出哪个是earliest,哪个是lastest,特别的和第二种方法还不太一致。

第二个途径是使用命令,通过kafka-run-class命令可以运行一些Kafka提供的类进行管理。

$ {KAFKA_HOME}/bin/kafka-run-class kafka.tools.GetOffsetShell --broker-list=localhost:9092 --topic TEST_TOPIC --time -2

其中-2是最小值,-1是最大值。

这个运行出来的结果,有些和第一种方法对不上。

我在zk上使用第二种方法set了offset,但是重启原来的yarn job,问题还是没有解决。

(等一旦解决,第一时间更新或另发文分享!)

上一篇下一篇

猜你喜欢

热点阅读