Java

RocketMQ负载均衡特性

2018-07-23  本文已影响1人  Java架构技术分享

Producer生产者

ProducerGroup

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

Producer Group 作用如下:

(1)标识一类 Producer

(2)可以通过运维工具查询返个収送消息应用下有多个 Producer 实例

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

Producer 连接 NameServer

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

Producer 发送消息负载均衡

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

Consumer消费者

Consumer Group

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

Consumer 连接 NameServer

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

Consumer 订阅消息负载均衡

假设有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负载均衡策略,一个消息不能确定被发送到具体的某个消费者,所以只能做简单的过滤数据分类。

上一篇下一篇

猜你喜欢

热点阅读