kafka支持两种方式回溯。一种是基于消息偏移量回溯,一种是基于时间点的消息回溯。
基于消息偏移量回溯
在kafka的每个分区中,每条消息都有一个唯一的offset值 ,即消息偏移量,用来表示消息在partition分区中的位置。消费者每次消费了消息,都会把消费的此条消息的offset提交到broker(消息节点),用于记录消费到分区中的位置,下条消息从这个位置之后开始消费。所以基于消息偏移量回溯很简单,只需要重置offset,然后消费者会从该offset之后开始消费
基于时间点的消息回溯
要想讲清楚kafka基于时间点的消息回溯的原理,得先从kafka存储消息的文件格式开始讲。
kafka存储消息是以日志的形式存储的,每一个partition都对应一个日志,但是日志不是一个文件,是多个文件组成的。日志文件都存储在一个文件夹里面的,文件格式为: topic-0 。
其中topic是kafka对应的主题名称、0是partition所在的分区号。文件夹里面存储的是什么文件呢,日志分段文件、偏移量索引文件、时间戳索引文件。