繁体   English   中英

如何设计SpringBoot Pagination Restful API with Kafka topic?

[英]How do I design SpringBoot Pagination Restful API with Kafka topic?

我正在尝试构建一个分页 restful API,它从 Kafka 主题中获取数据。

例如,在我的 Kafka 主题中,我有 10 亿条消息,其数据结构如下所示:

class Record {
   String ID;
   JsonObject studentInfo;   
}

如何获取特定学号的分页查询结果? 例如,我想获取 ID 为0123的学生的 200 条记录,而该学生可能有也可能没有关于 Kafka 主题的 200 条记录。

我的直觉方法是从 Kafka 主题中轮询数据,保持主题的偏移量并继续读取 Kafka 主题上的数据,直到我有 200 个特定的学生记录或到达 Kafka 主题的末尾。 但是,我不确定这是否是我应该采取的正确方法。

Confluent REST Proxy 已经做了你想要的,所以我建议使用它,而不是重新发明轮子

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 Streams 中的交互式查询功能,其中Spring 有一个InteractiveQueryService class 可以帮助解决这个问题

或者,如评论中所述,将您的主题转储到数据库,按 ID 索引,然后构建一个 API 端点,该端点将从该端点进行查询和分页。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM