主题模:在主题模型中,消息的生产者称为发布者,消息的消费者称为订阅者,存放消息的容器称为主题。
生产者组: 代表某一类的生产者,比如我们有多个秒杀系统作为生产者,这多个合在一起就是一个生产者组,它们一般生产相同的消息。
消费者组: 代表某一类的消费者,比如我们有多个短信系统作为消费者,这多个合在一起就是一个 消费者组,它们一般消费相同的消息。
主题: 代表一类消息,比如订单消息,物流消息等等。
主题中存在多个队列,生产者每次生产消息之后是指定主题中的某个队列发送消息的。集群消费模式下,一个消费者集群多台机器共同消费一个 `topic` 的多个队列,一个队列只会被一个消费者消费。如果某个消费者挂掉,分组内其它消费者会接替挂掉的消费者继续消费,一般来讲要控制消费者组中的消费者个数和主题中队列个数相同。
我们知道在发布订阅模式中一般会涉及到多个消费者组,而每个消费者组在每个队列中的消费位置都是不同的。如果此时有多个消费者组,那么消息被一个消费者组消费完之后是不会删除的(因为其它消费者组也需要呀),它仅仅是为每个消费者组维护一个消费位移(offset) ,每次消费者组消费完会返回一个成功的响应,然后队列再把维护的消费位移加一,这样就不会出现刚刚消费过的消息再一次被消费了。
维护多个队列?提高并发能力
RocketMQ` 技术架构中有四大角色 `NameServer` 、`Broker` 、`Producer` 、`Consumer` 。我来向大家分别解释一下这四个角色是干啥的。
Broker: 主要负责消息的存储、投递