Вы можете использовать kafkaConsumer.seekToEnd(Collection<TopicPartition> partitions)
для поиска последнего смещения данного раздела (ов).Согласно документации:
"Поиск последнего смещения для каждого из заданных разделов. Эта функция выполняет ленивый поиск, стремясь к окончательному смещению во всех разделах, только когда poll(Duration)
или position(TopicPartition)
Если разделы не предоставлены, ищите окончательное смещение для всех назначенных в данный момент разделов. "
Затем вы можете получить положение определенного раздела, используя position(TopicPartition partition)
.
Затем вы можете уменьшить его на 20 и использовать kafkaConsumer.seek(TopicPartition partition, long offset)
для получения последних 20 сообщений.
Просто,
kafkaConsumer.seekToEnd(partitionList);
long endPosition = kafkaConsumer.position(topicPartiton);
long recentMessagesStartPosition = endPosition - maxMessagesToReturn;
kafkaConsumer.seek(topicPartition, recentMessagesStartPosition);
Теперь вы можете получить самые последние 20 сообщений.использование poll()
Это простая логика, но если у вас есть несколько разделов, вы должны рассмотреть и эти случаи.Я не пробовал это, но надеюсь, вы получите концепцию.