如何根据时间戳重播kafka主题中的消息?

时间:2019-08-05 18:08:33

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

我正在尝试根据时间戳重播Kafka主题数据。我能够从起始位置查找数据,但是随后我需要检查每个分区中记录的结束时间戳。当我尝试比较记录的时间戳和endtimestamp时,循环在第一个分区处中断。

for(TopicPartition partition : records.partitions() ) {
  for (ConsumerRecord<Long, String> record : records) {
    if (record.timestamp() >= endtimeStamp) {
      consumer.seektoend(partition);
      break;
    }
  }
}

1 个答案:

答案 0 :(得分:1)

您的循环将始终在第一个分区(如果至少有一条带有timestamp()> = endtimeStamp的记录)期间中断,因为对于每个分区,您将遍历所有记录。

for (ConsumerRecord<Long, String> record : records) {
    if (record.timestamp() >= endtimeStamp) {
      consumer.seektoend(partition);
      break;
    }
  }

==>无论分区是什么,您都在这里进行所有记录。您将一次又一次调用同一分区的seekToEnd()

Yannick