kafka从指定位置重播

本文详细探讨了Kafka如何实现消息重播,以及消费者如何从特定偏移量开始读取数据。通过深入理解Kafka的分区和偏移管理,读者将能够配置消费者组以重新处理已消费的消息,这对于测试、数据处理和故障恢复场景非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.....
//配置
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(properties);
List<PartitionInfo> partitions = consumer.partitionsFor("test-topic");
List<TopicPartition> topicPartitions = Lists.newArrayList();
for (PartitionInfo partitionInfo : partitions) {
    TopicPartition topicPartition = new TopicPartition("test-topic",partitionInfo.partition());
    topicPartitions.add(topicPartition);
}
consumer.assign(topicPartitions);
Set<TopicPartition> assignments = consumer.assignment();
/* 构造offsetsForTimes参数,通过时间戳找到offset */
Map<TopicPartition, Long> query = Maps.newHashMap();
for (TopicPartition topicPartition : assignments) {
    query.put(topicPartition, startTime);
}
Map<TopicPartition, OffsetAndTimestamp> result = consumer.offsetsForTimes(query);
for (Map.Entry<TopicPartition, OffsetAndTimestamp> entry : result.entrySet()) {
    // 每个topic的partition都seek到执行的offset
    consumer.seek(entry.getKey(), entry.getValue().offset());
}
while(true){    
    ConsumerRecords<String, String> consumerRecord =consumer.poll(Duration.ofMillis(100));
    //then do your bussines

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值