美文网首页
【日更挑战】解决Kafka的Offset越界问题(未完)

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

作者: 扁圆柱体 | 来源:发表于2021-07-04 22:09 被阅读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,问题还是没有解决。

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/itvmultx.html