千家信息网

springboot中怎么实现kafa指定offset消费

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下springboot中怎么实现kafa指定offset消费,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
千家信息网最后更新 2026年11月01日springboot中怎么实现kafa指定offset消费

小编给大家分享一下springboot中怎么实现kafa指定offset消费,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

kafka消费过程难免会遇到需要重新消费的场景,例如我们消费到kafka数据之后需要进行存库操作,若某一时刻数据库down了,导致kafka消费的数据无法入库,为了弥补数据库down期间的数据损失,有一种做法我们可以指定kafka消费者的offset到之前某一时间的数值,然后重新进行消费。

首先创建kafka消费服务

@Service@Slf4j//实现CommandLineRunner接口,在springboot启动时自动运行其run方法。public class TspLogbookAnalysisService implements CommandLineRunner { @Override public void run(String... args) { //do something }}

kafka消费模型建立

kafka server中每个主题存在多个分区(partition),每个分区自己维护一个偏移量(offset),我们的目标是实现kafka consumer指定offset消费。

在这里使用consumer-->partition一对一的消费模型,每个consumer各自管理自己的partition。

@Service@Slf4jpublic class TspLogbookAnalysisService implements CommandLineRunner { //声明kafka分区数相等的消费线程数,一个分区对应一个消费线程 private static final int consumeThreadNum = 9; //特殊指定每个分区开始消费的offset private List partitionOffsets = Lists.newArrayList(1111,1112,1113,1114,1115,1116,1117,1118,1119); private ExecutorService executorService = Executors.newFixedThreadPool(consumeThreadNum); @Override public void run(String... args) { //循环遍历创建消费线程 IntStream.range(0, consumeThreadNum) .forEach(partitionIndex -> executorService.submit(() -> startConsume(partitionIndex))); }}

kafka consumer对offset的处理

声明kafka consumer的配置类

private Properties buildKafkaConfig() { Properties kafkaConfiguration = new Properties(); kafkaConfiguration.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, ""); kafkaConfiguration.put(ConsumerConfig.GROUP_ID_CONFIG, ""); kafkaConfiguration.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, ""); kafkaConfiguration.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, ""); kafkaConfiguration.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, ""); kafkaConfiguration.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, ""); kafkaConfiguration.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,""); kafkaConfiguration.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, ""); ...更多配置项 return kafkaConfiguration;}

创建kafka consumer,处理offset,开始消费数据任务#

private void startConsume(int partitionIndex) { //创建kafka consumer KafkaConsumer consumer = new KafkaConsumer<>(buildKafkaConfig()); try { //指定该consumer对应的消费分区 TopicPartition partition = new TopicPartition(kafkaProperties.getKafkaTopic(), partitionIndex); consumer.assign(Lists.newArrayList(partition)); //consumer的offset处理 if (collectionUtils.isNotEmpty(partitionOffsets) && partitionOffsets.size() == consumeThreadNum) { Long seekOffset = partitionOffsets.get(partitionIndex); log.info("partition:{} , offset seek from {}", partition, seekOffset); consumer.seek(partition, seekOffset); } //开始消费数据任务 kafkaRecordConsume(consumer, partition); } catch (Exception e) { log.error("kafka consume error:{}", ExceptionUtils.getFullStackTrace(e)); } finally { try { consumer.commitSync(); } finally { consumer.close(); } }}

消费数据逻辑,offset操作

private void kafkaRecordConsume(KafkaConsumer consumer, TopicPartition partition) { while (true) { try { ConsumerRecords records = consumer.poll(TspLogbookConstants.POLL_TIMEOUT); //具体的处理流程 records.forEach((k) -> handleKafkaInput(k.key(), k.value())); //?很重要:日志记录当前consumer的offset,partition相关信息(之后如需重新指定offset消费就从这里的日志中获取offset,partition信息) if (records.count() > 0) { String currentOffset = String.valueOf(consumer.position(partition)); log.info("current records size is:{}, partition is: {}, offset is:{}", records.count(), consumer.assignment(), currentOffset); } //offset提交 consumer.commitAsync(); } catch (Exception e) { log.error("handlerKafkaInput error{}", ExceptionUtils.getFullStackTrace(e)); } }}

以上是"springboot中怎么实现kafa指定offset消费"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

消费 数据 处理 篇文章 线程 任务 信息 内容 数据库 日志 更多 模型 配置 特殊 重要 一对一 不怎么 主题 做法 场景 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 互联网科技行业发展 科技制造互联网公司 润盈互联网科技 狮子座互联网科技培训 互联网金融和金融科技 新华互联网科技校企合作 开启互联网科技时代小说 互联网和高科技公司 深圳市运趣互联网科技有限公司 北京大学互联网科技怎么样 南平创想时代互联网科技有限公司 洛阳共同富裕互联网科技有限公司 深圳艾果互联网通讯科技 互联网科技大赛获奖感言 高科技互联网套路 山东星卡互联网科技有限公司官网 智帮互联网科技公司最近动向 电子商务与互联网科技的关系 好易买互联网科技 哈尔滨大商圈互联网科技有限公司 互联网品科技 互联网与科技金融数据 期待互联网科技 九亚互联网科技 长亮科技 互联网金融 成都仁贤领冠互联网科技有限公司 厦门比较好的科技互联网公司 岳阳华臻互联网科技有限公司 现代互联网科技公司
0