RocketMQ负载均衡特性

Producer生产者并发

  1. ProducerGroup
    用来表示一个发送消息应用,一个 Producer Group 下包含多个 Producer 实例,能够是多台机器,也能够是一台机器的多个进程,或者一个进程的多个 Producer 对象。一个 Producer Group 能够发送多个 Topic 消息。

    Producer Group 做用以下:负载均衡

    (1)标识一类 Producer运维

    (2)能够经过运维工具查询返个収送消息应用下有多个 Producer 实例分布式

    (3)发送分布式事务消息时,若是 Producer 中途意外宕机,Broker会主动回调Producer Group内的任意一台机器来确认事务状态。工具

  2. Producer 链接 NameServer

    Producer与NameServer集群中的其中一个节点(随机选择)创建长链接,按期从NameServer取到Topic路由信息(Broket注册的IP地址),并向提供Topic服务的Master创建长链接,而且定时(默认30秒)向Master 发送心跳。spa

  3. Producer 发送消息负载均衡

    发送消息经过轮询队列的方式发送,每一个队列接收平均的消息量。经过增长机器,能够水平扩展队列容量。另外也能够自定义方式选择发往哪一个队列。注:另外多个队列能够部署在一台机器上,也能够分别部署在多台不一样的机器上。线程

图片描述

Consumer消费者对象

  1. Consumer Group

    用来表示一个消费消息应用,一个Consumer Group下包含多个Consumer实例,能够是多台机器,也能够是多个进程,或者是一个进程的多个Consumer对象。一个Consumer Group下的多个Consumer以均摊 方式消费消息,若是设置为广播方式,那么这个Consumer Group下的每一个实例都消费全量数据。队列

  2. Consumer 链接 NameServer

    Consumer与NameServer集群中的其中一个节点(随机选择)创建长链接,按期从NameServer取到Topic 路由信息,并向提供Topic服务的Master、Slave创建长链接,并定时向Master、Slave发送心跳。Consumer 既能够从 Master 订阅消息,也能够从 Slave 订阅消息,订阅规则由 Broker 配置决定。进程

  3. Consumer 订阅消息负载均衡

    假设有5个队列,2 个Consumer,那举第一个Consumer消费3个队列,第二Consumer 消费2个队列。这样便可达到平均消费的目的,能够水平扩展Consumer来提升消费能力。可是Consumer 数量要小于等于队列数量,若是Consumer超过队列数量,那举多余的Consumer将不能消费消息。

图片描述

  1. 消费并行度

    修改消费并行度方法:

    (1)同一个Consumer Group下,经过增长Consumer实例数量来提升并行度,超过订阅队列数的Consumer实例无效。能够经过加机器,或者在已有机器启动多个进程的方式。

    (2)提升单个 Consumer 的消费并行线程,经过修改设置 consumeThreadMin最小并发线程数和consumeThreadMax最大并发线程数来提升消费能力。

    (3)经过设置Consumer的consumeMessageBatchMaxSize这个参数,默认是1,即一次只消费一条消息,例如设置为N,那么每次消费的消息数小于等于N。这样便可大幅度提升消费的吞吐量。

Tag消息过滤最后讲解一些Tag,Tag是用于消息分类时使用的!可是只能作简单的过滤。那么能不能消费端A订阅这个Tag1就能肯定Tag1消息发送到消费端A呢?答案是不能!根据前面的Consumer负载均衡策略,一个消息不能肯定被发送到具体的某个消费者,因此只能作简单的过滤数据分类。