使用公平排队处理 S3 数据

Process S3 data with fair queueing

我必须处理保存到具有密钥结构 client_id/uid 的 S3 存储桶中的数据。对 S3 的更新必须按照 FIFO 进行处理。实现此目的的一种方法是对 SQS 的更新进行排队,消息负载是 S3 密钥,然后对其进行处理。

但是,如果某些客户端推送的更新比其他客户端多得多,这是不公平的。

假设我想在 client_id 之间进行公平处理。理想情况下,我希望收到一批队列消息,其中包含每个 client_id 的最旧消息。批处理必须包含每个客户端一条消息。然后我会启动一些工人来处理批次,一旦他们都完成了就进行下一次迭代。

是否可以在不为每个客户端创建 SQS 队列的情况下执行此操作?

我应该考虑改用其他 AWS 服务吗?

John Rotenstein 用他的评论为我指明了正确的方向。

考虑一个队列,每个队列有 15 条消息给客户端。消息是这样添加的

for message = 1 to 15 {
  for client_id = 1 to 3 {
    sendMessage(messageGroupID=client_id)
  }
}

在循环中接收消息将在每次调用时获取以下内容

10 messages for client_id = 1
10 messages for client_id = 2
10 messages for client_id = 3
5 messages for client_id = 1 and 5 messages for client_id = 2
5 messages for client_id = 3

与并行消费者接收消息时也是如此。

与我想象的完全不同,但它确实解决了我的问题。