kafka数据如何被重复消费
近段时间学习极客时间李玥⽼师的后端存储实战课时,看到⼀个很多意思的东西:⽤kafka存储点击流的数据,并重复处理。在以往的使⽤
中,kafka只是⼀个消息传输的载体,消息被消费后就不能再次消费。新知识与印象相冲突,于是就有了本篇⽂章:kafka数据如何被重复消费。
前期理论了解
⾸先我先去官⽹纠正了我对kafka的整体了解。
image
官⽹对kafka的描述是:⼀个分布式流平台。怪⾃⼰的学艺不精。
其次,我重新看了⼀下kafka消费者的消费过程:kafka⾸先通过push/poll(默认为poll)获取消息,接收消息处理完成后⼿动/⾃动提交消费成功,kafka服务器则根据提交情况决定是否移动当前偏移量。
⽅案确定
kafka消费者读取数据的位置是通过偏移量判断,那如果我能将偏移量⼿动设置为起始位置,就能实现重复消费?这个有搞头。
如何⼿动设置偏移量是关键。
s how m e the cod e
代码的关键主要在于偏移量设置 api 的调⽤,其余没什么特别。
要注意的是,代码中我分别调⽤了作⽤不同的设置偏移量,仅作为展⽰,可按需取⽤。
最后消费者消息消息时,我只使⽤默认的拉取条数设置消费⼀次,可按需进⾏修改。
Seek to the first offt for each of the given partitions. This function evaluates lazily, eking to the first offt in all partitions only when poll(long) or position(TopicPartition) are called. If no partition is provided, ek to the first offt for all of the currently assigned partitions.
于是我先进⾏⼀次 poll 操作后再设置偏移量。