如何使用Java从Kafka获取最近5天的消息

时间:2017-09-05 05:37:23

标签: java apache-kafka kafka-consumer-api

我已经为Kafka中的主题设置了TTL为7天,我从Kafka获取数据并将其存储在数据库中,但是从过去5天开始我的数据库服务器已关闭,现在我必须获取最后5天来自Kafka的消息,并将其存储在数据库中 注意:从过去5天开始,Kafka没有问题。

2 个答案:

答案 0 :(得分:6)

首先调用consumer.partitionsFor()方法来获取主题的分区

https://kafka.apache.org/0110/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#partitionsFor(java.lang.String)

然后调用consumer.offsetsForTimes()以获取成功处理最后一条消息的5天前时间戳的每个分区的偏移量。

https://kafka.apache.org/0110/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#offsetsForTimes(java.util.Map)

然后调用consumer.seek()来定位当前消费者偏移量并继续调用poll()并像往常一样处理消息。

https://kafka.apache.org/0110/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#seek(org.apache.kafka.common.TopicPartition,%20long)

答案 1 :(得分:1)

对于之前的Nice Answer,我会添加调用partitionsFor方法来获取您主题的分区,然后按照@Hans的说法进行操作。