有些情况下需要从指定时间点开始重新消费kafka,下面记录两种方法

一、直接指定时间重置Offset

新版本(2.*)的kafka才支持 –reset-offsets 参数

kafka/bin/kafka-consumer-groups.sh --bootstrap-server 192.168.72.16:9092 --group elk-logstash --reset-offsets  --to-datetime '2020-07-20T00:00:00.000'  --topic request-php-log --execute

# --all-topics 指定所有topic

二、查找指定时间的offset并手动重置

0.*版本的只能用这种笨方法

前提是生产进topic的message 需要有时间字段,例如:”2020-07-20 00:10:23 test messages.”

  • 查看topic的offset最大值

    –time -1 查找offset最大值

    –time -2 查找offset最小值

    /roobo/server/kafka/bin/kafka-run-class.sh kafka.tools.GetOffsetShell  --broker-list 192.168.72.16:9092 --topic request-php-log --time -1
  • 指定offset消费topic

    根据日志内容的时间判断offset是不是自己想要的时间点

    如果不是就增大或者减小offset值,直至找到自己想要的时间点的日志,并记录下offset

    ./kafka-simple-consumer-shell.sh --broker-list 192.168.72.16:9092 --topic request-php-log --max-messages 10 --partition 1 --print-offsets --offset 1522801500
  • 修改zookeeper里的offset偏移量

    记录下offset后 需要手动去zookeeper里修改consumer-group的消费偏移量

    ./zkCli.sh
    set /consumers/test-consumer-group/offsets/request-php-log/1 1522810500

这时再次启动test-consumer-group的消费端即可从指定的offset处开始消费