中间件速查手册
消息队列消费者组

Consumer Group 是什么?

一组消费者分摊分区,组内一条消息只被处理一次

类比:同一个部门的同事轮流处理工单,一件工单只归一个人

它解决什么问题

单消费者处理不过来,就加人。但加人不能导致一条消息被处理两次——消费者组用「分区分配」解决这件事:一个分区同时只属于组内一个消费者。

不同消费者组之间互不影响,各自维护自己的 offset。这就是「一条消息可以被多个系统各消费一次」的实现方式。

Rebalance 的代价

组内成员增减、订阅的 Topic 变化、分区数变化,都会触发 Rebalance:所有消费者暂停消费、重新分配分区。

期间会出现消费停顿,甚至重复消费。所以要用静态成员(static membership)、合理的 session.timeout,避免频繁上下线。

  • 消费者数 ≤ 分区数,多出来的会空闲
  • 分区分配策略:Range、RoundRobin、Sticky、CooperativeSticky
  • RocketMQ 对应概念叫 ConsumerGroup + 集群/广播模式

它出现在这些中间件里

相关概念