kafka重置偏移量
背景
某些时候,kafka上游生产者生产的消息有错误,或者下游消费者并不需要消费某部分的数据,这时候,通常有两个解决方案,一种是对数据做不解析处理,直接略过。另一种就是暂时关掉kafka的消费者组,等到生产者正常后再进行消费,但由于kafka本身是默认断点续传的,此时就需要我们先重置kafka中当前kafka组的offset。
解决方案
更改消费者组
由于kafka对某topic中offset的管理是以组的形式来进行的,因此,在新建或更改消费者组后,对于offset的管理也会重新开始,策略取决于配置的auto.offset.reset参数
在重启动时指定起始offset
在再次启动时,通过配置指定要消费topic中分区的offset
@KafkaListener(groupId = "topic_group_test",topicPartitions = { @TopicPartition(topic = "topic_test",partitionOffsets = @PartitionOffset(partition = "0", initialOffset = "9830")) })
java springboot版本
通过kafka服务端脚本指定重置
kafka-consumer-groups.sh --bootstrap-server 10.202.13.27:9092 \ --group cjw --reset-offsets --topic cjw-test --to-earliest --execute
具体支持8种操作
--to-earliest
--to-latest
--to-current
--to-offset
--shift-by N: 把位移调整到当前位移+N 处,N可以为负数
--to-datetime
--by-duration
--from-file
通过API代码来指定
consumer.seekToEnd( consumer.partitionsFor(topic).stream().map(partitionInfo-> new TopicPartition(topic,partitionInfo.partition())) .collect(Collectors.toList()) );
void seek(TopicPartition partition, long offset);
Void seek(TopicPartition partition,OffsetAndMetadata offsetAndMetadata);
Void seekToBeginning(Collection
Void seekToEnd(Collection
注意
以上所有操作都需要在消费者组处于未激活的情况下进行
使用代码方式时,需要指定所有分区的消费策略
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库