问题
我们的PROCESSING SERVICE为 UI、API 和内部客户端提供服务,并监听来自Kafka的命令。少数 API 客户端可能会在短时间内创建大量生成任务(一个任务是 N 条消息)。使用 Kafka,我们无法控制命令分发,因为每个命令都到达由一个处理实例(又名工作人员)使用的分区。因此,在处理 API 请求时,UI 请求可能会等待太久。
在理想的实现中,我们应该均匀地处理所有任务,无论其大小。处理服务的容量分布在所有活动任务中。而且即使集群负载很重,我们也始终明白,已经到达的新任务几乎可以立即开始处理,至少在所有其他任务的处理结束之前。
解决方案
相反,我们想要一个看起来更像下图的架构,其中每个客户和端点的组合都有单独的队列。这种架构为我们提供了更好的隔离,以及基于每个客户动态调整吞吐量的能力。 在制作人的一边
- 任务来自客户端
- 立即为此任务创建队列
- 将所有消息发送到此队列
站在消费者一边
- 在一个过程中,您不断更新队列列表
- 在其他进程中,您遵循此列表并使用每个队列中的例如 1 条消息
- 规模消费者
问题
这样的问题有什么通用的解决方案吗?使用 RabbitMQ 或任何其他工具。Н从历史上看,我们在项目中使用 Kafka,所以如果有任何方法使用 - 这太棒了,但我们可以使用任何技术来解决问题。