← 中文资源

简体中文版本

竞争消费者

竞争消费者让多个实例从同一队列拉取、共享工作并水平扩展——靠逐消息的原子认领语义防止重复处理。

阅读英文原文

概念定义

一个队列、多个 worker:每条消息在抢它的消费者里恰有一个赢家。工作从不等待特定 worker,利用率保持高位。

工作机制

认领语义因系统而异:SQS 式队列的原子弹出、Kafka 的消费组分区、AMQP 的预取确认。可见性或租约超时限定在途时长:租约过期即重投,处理必须幂等。消费者数量是扩缩旋钮,上限是队列吞吐与下游容量。

使用场景

独立可并行的工作:图片处理、通知发送、缓存失效——没有按实体排序要求的一切负载。需要按键保序时改为与顺序护航组合使用。

常见误区

竞争消费者刻意打破到达顺序——有序领域要用护航或按键单消费者。“加消费者总加吞吐”在队列吞吐顶或下游瓶颈处停止,再往后只加争用。队列给的是至少一次加重投:崩溃重启窗口里副作用会重复——幂等键或去重窗口是必需品;慢消费者握着长租约会扣押消息,租约要按 p99 处理时长定;按队列深度自动扩缩对突发过敏,按排空速率缺口调更稳。