.....
//配置
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
}