[英]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.