我正在研究Kafka 0.9。我想知道是否有任何方法通过了解分区和偏移来检索已经处理过的消息。例如,消费者当前正在使用分区1和偏移10处的消息。我希望在同一分区和偏移量5处获取消息。
我能想到的一种方法是将偏移重置为5并消耗一条消息。但poll()方法只能返回一批消息。所以我必须接受第一条消息并忽视其他消息。处理完消息后,将重置偏移量。
我认为这会奏效。但仍然想知道是否还有其他优雅的方式。
答案 0 :(得分:2)
Kafka旨在从磁盘读取长条纹数据,而无需移动磁盘头 - 换句话说,它被优化为使用线性读取。忽略你必须从磁盘读取的整个数据块(并且可能通过网络提供服务)似乎效率低下,但实际上使磁盘磁头跳得很多是非常低效的。查看Kafka的设计理念,以及它对磁盘的使用, here 。
换句话说,您的方法可能有效。但是你更像是某人使用关系数据库而不是消息系统的方式。
答案 1 :(得分:2)
您应该能够使用“搜索”方法从您需要的偏移量中读取消息。
看看“控制消费者的位置” https://kafka.apache.org/090/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html