Producer生产者并发
Producer Group 做用以下:负载均衡
(1)标识一类 Producer运维
(2)能够经过运维工具查询返个収送消息应用下有多个 Producer 实例分布式
(3)发送分布式事务消息时,若是 Producer 中途意外宕机,Broker会主动回调Producer Group内的任意一台机器来确认事务状态。工具
Producer与NameServer集群中的其中一个节点(随机选择)创建长链接,按期从NameServer取到Topic路由信息(Broket注册的IP地址),并向提供Topic服务的Master创建长链接,而且定时(默认30秒)向Master 发送心跳。spa
发送消息经过轮询队列的方式发送,每一个队列接收平均的消息量。经过增长机器,能够水平扩展队列容量。另外也能够自定义方式选择发往哪一个队列。注:另外多个队列能够部署在一台机器上,也能够分别部署在多台不一样的机器上。线程
Consumer消费者对象
用来表示一个消费消息应用,一个Consumer Group下包含多个Consumer实例,能够是多台机器,也能够是多个进程,或者是一个进程的多个Consumer对象。一个Consumer Group下的多个Consumer以均摊 方式消费消息,若是设置为广播方式,那么这个Consumer Group下的每一个实例都消费全量数据。队列
Consumer与NameServer集群中的其中一个节点(随机选择)创建长链接,按期从NameServer取到Topic 路由信息,并向提供Topic服务的Master、Slave创建长链接,并定时向Master、Slave发送心跳。Consumer 既能够从 Master 订阅消息,也能够从 Slave 订阅消息,订阅规则由 Broker 配置决定。进程
假设有5个队列,2 个Consumer,那举第一个Consumer消费3个队列,第二Consumer 消费2个队列。这样便可达到平均消费的目的,能够水平扩展Consumer来提升消费能力。可是Consumer 数量要小于等于队列数量,若是Consumer超过队列数量,那举多余的Consumer将不能消费消息。
修改消费并行度方法:
(1)同一个Consumer Group下,经过增长Consumer实例数量来提升并行度,超过订阅队列数的Consumer实例无效。能够经过加机器,或者在已有机器启动多个进程的方式。
(2)提升单个 Consumer 的消费并行线程,经过修改设置 consumeThreadMin最小并发线程数和consumeThreadMax最大并发线程数来提升消费能力。
(3)经过设置Consumer的consumeMessageBatchMaxSize这个参数,默认是1,即一次只消费一条消息,例如设置为N,那么每次消费的消息数小于等于N。这样便可大幅度提升消费的吞吐量。
Tag消息过滤最后讲解一些Tag,Tag是用于消息分类时使用的!可是只能作简单的过滤。那么能不能消费端A订阅这个Tag1就能肯定Tag1消息发送到消费端A呢?答案是不能!根据前面的Consumer负载均衡策略,一个消息不能肯定被发送到具体的某个消费者,因此只能作简单的过滤数据分类。