我正在尝试构建一个分页的restful API,它可以从Kafka主题中获取数据。
例如,在我的Kafka主题中,我有10亿条信息,它们的数据结构如下:
class Record {
String ID;
JsonObject studentInfo;
}
如何获得特定学号的分页查询结果?例如,我想获得学号为0123
的学生的200条记录,该学生可能有也可能没有关于Kafka主题的200条记录。
我的直觉方法是从Kafka主题中抽取数据,保留主题上的偏移量,然后继续阅读Kafka主题上的数据,直到我有200个特定的学生记录或读到Kafka主题的结尾,但我不确定这是否是我应该采取的正确方法。
1条答案
按热度按时间z9smfwbn1#
ConfluentREST代理已经完成了您想要的工作,因此我建议使用它,而不是重新发明轮子
为使用订阅/分配API之一指定的主题或分区获取数据
其中,不是要轮询的记录数,而是给予它一个超时(例如
consumer.poll(Duration timeout)
)或max_bytes
(我认为是消费者配置fetch.max.bytes
)。重新获取该API端点以获取下一“批”(即页)记录
https://docs.confluent.io/platform/current/kafka-rest/api.html
特定的学生证吗
你不会的。这不是Kafka的工作方式。如果这是你真正需要的功能,那么你可以使用Kafka流的Interactive Queries功能,Spring has an
InteractiveQueryService
class that can help with this。或者,如评论中所述,将主题转储到数据库中,按ID建立索引,然后构建一个API端点,从数据库中进行查询和分页。