RocketMQ学习


基本概念

Producer Group

标识发送同一类消息的Producer,通常发送逻辑一致。发送普通消息的时候,仅标识使用,并无特别用处。若事务消息,如果某条发送某条消息的producer-A宕机,使得事务消息一直处于PREPARED状态并超时,则broker会回查同一个group的其 他producer,确认这条消息应该commit还是rollback。

Consumer Group

标识一类Consumer的集合名称,这类Consumer通常消费一类消息,且消费逻辑一致。同一个Consumer Group下的各个实例将共同消费topic的消息,起到负载均衡的作用。Consumer Group、topic 和 tag决定消费唯一Queue消息。

Topic

标识一类消息的逻辑名字,消息的逻辑管理单位。无论消息生产还是消费,都需要指定Topic。消息主题,通过Topic对不同的业务消息进行分类。

Tag

消息标签,用来进一步区分某个Topic下的消息分类,消息从生产者发出即带上的属性。

选择创建多个Topic,或者在同一个Topic下创建多个Tag。但通常情况下,不同的Topic之间的消息没有必然的联系,而Tag则用来区分同一个Topic下相互关联的消息。

如淘宝交易消息,京东物流消息使用不同的Topic进行区分;而同样是天猫交易消息,电器类订单、女装类订单、化妆品类订单的消息可以用Tag进行区分。

订阅关系一致

1、订阅一个Topic且订阅一个Tag

同一Group ID下的三个Consumer实例C1、C2和C3分别都订阅了TopicA,且订阅TopicA的Tag也都是Tag1

2、订阅一个Topic且订阅多个Tag

同一Group ID下的三个Consumer实例C1、C2和C3分别都订阅了TopicB,订阅TopicB的Tag也都是Tag1Tag2

3、订阅多个Topic且订阅多个Tag

消费方式

集群消费

同一个Group ID所标识的所有Consumer平均分摊消费消息。例如某个Topic有9条消息,一个Group ID有3个Consumer实例,那么在集群消费模式下每个实例平均分摊,只消费其中的3条消息。

广播消费

同一个Group ID所标识的所有Consumer都会各自消费某条消息一次。例如某个Topic有9条消息,一个Group ID有3个Consumer实例,那么在广播消费模式下每个实例都会各自消费9条消息。

顺序消息

由于Consumer消费消息的时候是针对Message Queue顺序拉取并开始消费,且一条Message Queue只会给一个消费者(集群模式下),所以能够保证同一个消费者实例对于Q上消息的消费是顺序地开始消费(不一定顺序消费完成,因为消费可能并行)。因为这样消费的实例只能有一个,多出来的实例就都会空跑。

普通顺序消息

顺序消息的一种,正常情况下可以保证完全的顺序消息,但是一旦发生异常,Broker宕机或重启,由于队列总数发生发化,消费者会触发负载均衡,而默认地负载均衡算法采取哈希取模平均,这样负载均衡分配到定位的队列会发化,使得队列可能分配到别的实例上,则会短暂地出现消息顺序不一致。

严格顺序消息

顺序消息的一种,无论正常异常情况都能保证顺序,但是牺牲了分布式 Failover 特性,即 Broker集群中只要有一台机器不可用,则整个集群都不可用,服务可用性大大降低。

消息负载均衡策略

发布方消息负载均衡策略

消息队列RocketMQ版针对发布方采取的是轮询制,即Producer的消息以轮询的方式发送至Queue,如下图所示。

图中箭头线条上的标号代表顺序,发布方会把第一条消息发送至Queue 0,然后第二条消息发送至Queue 1,以此类推,第八条消息发送至Queue 7,第九条消息又发送至Queue 0,循环往复。

注意⚠️:

  • 若订阅方机器数量等于Queue的数量,则每台机器会处理1个Queue上的消息

  • 若订阅方机器数量小于Queue的数量,则每台机器会处理多个Queue上的消息

  • 若订阅方机器数量大于Queue的数量,则超出Queue数量的机器会处理0个Queue上的消息,如下图所示。

如果其中一台机器处理变慢,可能是机器硬件、系统、远程RPC调用或Java GC等原因导致分配至此机器上的Queue的消息不能及时处理;此外,消息队列RocketMQ版的消息负载是按Queue为粒度维护,所以,整个Queue上的消息都会堆积(后面的此Queue消息需要等待被消费)。

事物

消息队列RocketMQ版

打赏
  • 版权声明: 本网站所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  1. © 2020-2021 Lauy    湘ICP备20003709号-1

请我喝杯咖啡吧~

支付宝
微信