如何设计带有Kafka主题的SpringBoot分页REST API?

llycmphe  于 2023-01-29  发布在  Apache
关注(0)|答案(1)|浏览(92)

我正在尝试构建一个分页的restful API,它可以从Kafka主题中获取数据。
例如,在我的Kafka主题中,我有10亿条信息,它们的数据结构如下:

class Record {
   String ID;
   JsonObject studentInfo;   
}

如何获得特定学号的分页查询结果?例如,我想获得学号为0123的学生的200条记录,该学生可能有也可能没有关于Kafka主题的200条记录。
我的直觉方法是从Kafka主题中抽取数据,保留主题上的偏移量,然后继续阅读Kafka主题上的数据,直到我有200个特定的学生记录或读到Kafka主题的结尾,但我不确定这是否是我应该采取的正确方法。

z9smfwbn

z9smfwbn1#

ConfluentREST代理已经完成了您想要的工作,因此我建议使用它,而不是重新发明轮子

GET /consumers/(string:group_name)/instances/(string:instance)/records

为使用订阅/分配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端点,从数据库中进行查询和分页。

相关问题