读取事务性写入的最后一个Kafka分区的记录

时间:2019-03-07 08:11:33

标签: apache-kafka

我正在尝试读取主题分区的最后一条记录。主题的生产者正在事务性地写作。使用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 ),然后开始轮询。

它之前一直运行良好,但是现在我有一个例外,告诉我零记录已被轮询。可能是什么原因呢?我无法复制它,我想我迷路了。

0 个答案:

没有答案