【问题标题】:Kafka for API gateway to store messagesKafka 用于 API 网关来存储消息
【发布时间】:2022-01-14 07:54:03
【问题描述】:
我需要为不同的服务构建一个安全的 REST API,其中客户端服务可以发布和接收来自其他客户端的消息(如邮箱。但消息将采用 JSON 格式。并且应该是持久的。我预计大约 5000客户服务。每天每项服务大约有 50 条消息)。
我的问题是:
- 我可以为此使用 Kafka(我想我需要一些包装
Kafka 来管理其他任务)?
- 如果是,则发件箱和收件箱将成为单独的主题
每个服务?(每个服务2个主题。5000 * 2个主题。我的计划是
在新客户加入时动态创建它们)
- 编写这种网关的替代技术有哪些。
任何帮助将不胜感激。
【问题讨论】:
标签:
rest
apache-kafka
api-gateway
【解决方案1】:
您不能使用 Kafka 来实现 REST API,因为 REST API 意味着请求/响应,而 Kafka 只是一个消息队列(Kafka 不提供响应消息的机制)。您可以使用 Kafka 生成消息以供其他服务使用。消息队列的思想是将生产者与消费者解耦,反之亦然。当消费者收到一条消息时,它会对其进行操作,就是这样。但是,当您说收件箱/发件箱时,您暗示有对消息的响应,这意味着生产者和消费者的节奏应该相似,这将它们耦合起来,这与消息队列的性质相悖。
在您的情况下,使用 http 请求/响应甚至 websocket 似乎更有意义。如果您想保存请求/响应数据(使其持久化),您可以将其保存在数据库、对象存储(如S3)、log it 中,或者将每条消息发送到 Kafka,以便 Kafka 存储您的所有消息,写入 Kafka 实际上会非常快,因为 Kafka 粗略地说是一个仅附加日志。然后,您可以使用 ksqldb 搜索消息值。