更换group.id时kafka从哪开始消费

本文详细解析了Kafka中通过调整group.id和auto.offset.reset属性实现不同消费起点的方法。包括如何从最新数据开始消费,如何从历史数据起始点消费,以及在不改变消费组时的消费行为。

前言:

设置消费者properties的两个参数,这两个参数决定从哪开始消费的问题

1、consumer.group.id

2、properties.setProperty("auto.offset.reset", "earliest”) // latest

注意:

只要不更改group.id,每次重新消费kafka,都是从上次消费结束的地方继续开始,不论"auto.offset.reset”属性设置的是什么

 

场景一:Kafka上在实时被灌入数据,但kafka上已经积累了两天的数据,如何从最新的offset开始消费?

(最新指相对于当前系统时间最新)

1.将group.id换成新的名字(相当于加入新的消费组)

2.网上文章写还要设置 properties.setProperty("auto.offset.reset", "latest”)

实验发现即使不设置这个,只要group.id是全新的,就会从最新的的offset开始消费

 

场景二:kafka在实时在灌入数据,kafka上已经积累了两天的数据,如何从两天前最开始的位置消费?

1.将group.id换成新的名字

2.properties.setProperty("auto.offset.reset", "earliest”)

 

场景三:不更改group.id,只是添加了properties.setProperty("auto.offset.reset", "earliest”),consumer会从两天前最开始的位置消费吗?

不会,只要不更改消费组,只会从上次消费结束的地方继续消费

 

场景四:不更改group.id,只是添加了properties.setProperty("auto.offset.reset", "latest”),consumer会从距离现在最近的位置消费吗?

不会,只要不更改消费组,只会从上次消费结束的地方继续消费

package com.tplink.nbu.demo.basicspringboot.consumer; import java.time.Duration; import java.util.Collections; import java.util.Properties; import com.fasterxml.jackson.databind.deser.std.StringDeserializer; import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; /** * 基于kafka clients的消费者 * * @author Deng Peihao * @version 1.0 * @since 2025/9/4 */ public class ConsumerClient { public static void main(String[] args) { new ConsumerExample().consumer(); } } @Slf4j class ConsumerExample { private static final String TOPIC = "my-topic"; private static final String BOOTSTRAPSERVERS = "192.168.56.130:9092"; private static final String GROUPID = "my-group"; public void consumer() { // 配置消费者属性 Properties props = new Properties(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAPSERVERS); props.put(ConsumerConfig.GROUP_ID_CONFIG, GROUPID); props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false"); props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, "100"); try (Consumer<String, String> consumer = new KafkaConsumer<>(props)) { // 订阅主题 consumer.subscribe(Collections.singletonList(TOPIC)); // 持续消费消息 while (true) { ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000)); for (ConsumerRecord<String, String> rec : records) { log.info("Consumer Client Record: {}", rec.value()); } consumer.commitAsync((offsets, exception) -> { if (exception != null) { log.error("提交失败. offsets: {},exception: {}", offsets, exception.getMessage()); } }); } } catch (Exception e) { log.error("消费者异常 {}", e.getMessage()); } } } 有问题吗
最新发布
09-05
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值