我正在尝试读取主题分区的最后一条记录。主题的生产者正在事务性地写作。使用isolation.level=read_committed
设置使用者。我手动管理偏移量。这是我的消费者代码:
// Fetch the end offset of a partition
Map<TopicPartition, Long> endOffsets = consumer.endOffsets(Collections.singleton(topicPartition));
Long endOffset = endOffsets.get(topicPartition);
// Try to read the last record
if (endOffset > 0) {
consumer.seek(topicPartition, Math.max(0, endOffset - 5));
List records = consumer.poll(10 * 1000).records(topicPartition);
if (records.isEmpty()) {
throw new IllegalStateException("How can this be?");
} else {
// Return the last record
return records.get(records.size() - 1);
}
}
因此,要读取最后一条记录,我要求结束偏移,然后寻求endOffset - 5
(因为Kafka在完全一次模式下跳过偏移,就像我在这个问题中所看到的:Kafka Streams does not increment offset by 1 when producing to topic ),然后开始轮询。
它之前一直运行良好,但是现在我有一个例外,告诉我零记录已被轮询。可能是什么原因呢?我无法复制它,我想我迷路了。