RocketMQ如何做负载均衡?
通过Topic在多Broker中分布式存储实现。
1)producer端
发送端指定message queue发送消息到相应的broker,来达到写入时的负载均衡: 提升写入吞吐量,当多个producer同时向一个broker写入数据的时候,性能会下降 消息分布在多broker中,为负载消费做准备
默认策略是随机选择:
producer维护一个index
每次取节点会自增
index向所有broker个数取余 自带容错策略
其他实现:
SelectMessageQueueByHash
hash的是传入的args
SelectMessageQueueByRandom SelectMessageQueueByMachineRoom 没有实现
也可以自定义实现MessageQueueSelector接口中的select方法
2)consumer端
采用的是平均分配算法来进行负载均衡。
其他负载均衡算法
平均分配策略(默认)(AllocateMessageQueueAveragely) 环形分配策略 (AllocateMessageQueueAveragelyByCircle) 手动配置分配策略 (AllocateMessageQueueByConfig) 机房分配策略 (AllocateMessageQueueByMachineRoom) 一致性哈希分配策略 (AllocateMessageQueueConsistentHash) 靠近机房策略(AllocateMachineRoomNearby)