工作中遇到过问题:包括数据Invalid Message和Failed_to_UNcompress等,会造成消费端的iterator损坏,导致消费进程挂掉,需要手动跳过某些数据;

Kafka的偏移量有保存在zookeeper和kafka中topic(_consumer_offset)2种方式;

1、修改保存在zookeeper中的偏移量:

使用./zkCli.sh -server xxxx:2181 进入zk命令行模式,get对应的消费组的对应分区的偏移量,使用set方法指定偏移量;

2、修改保存在kafka的偏移量:

使用Kafka自带的kafka-consumer-groups.sh脚本设置消费者组(consumer group)的位移, 这是0.11.0.0版本提供的新功能且只适用于新版本consumer,   在新版本之前,如果要为已有的consumer group调整位移必须要手动编写Java程序调用KafkaConsumer#seek方法,,0.11.0.0版本丰富了kafka-consumer-groups脚本的功能,用户可以直接使用该脚本很方便地为已有的consumer group重新设置位移,但前提必须是consumer group必须是inactive的,即不能是处于正在工作中的状态。

确定topic作用域——当前有3种作用域指定方式:--all-topics(为consumer group下所有topic的所有分区调整位移),--topic t1 --topic t2(为指定的若干个topic的所有分区调整位移),--topic t1:0,1,2(为指定的topic分区调整位移)

确定位移重设策略——当前支持8种设置规则:

--to-earliest:把位移调整到分区当前最小位移

--to-latest:把位移调整到分区当前最新位移

--to-current:把位移调整到分区当前位移

--to-offset : 把位移调整到指定位移处

--shift-by N: 把位移调整到当前位移 + N处,注意N可以是负数,表示向前移动

--to-datetime :把位移调整到大于给定时间的最早位移处,datetime格式是yyyy-MM-ddTHH:mm:ss.xxx,比如2017-08-04T00:00:00.000

--by-duration :把位移调整到距离当前时间指定间隔的位移处,duration格式是PnDTnHnMnS,比如PT0H5M0S

--from-file :从CSV文件中读取调整策略

确定执行方案——当前支持3种方案:

什么参数都不加:只是打印出位移调整方案,不具体执行

--execute:执行真正的位移调整

--export:把位移调整方案按照CSV格式打印,方便用户成csv文件,供后续直接使用

-shift-by N使用场景最多,使用如下: