一、消息的生产
作者:互联网
消息的生产过程
Producer将消息写入到broker的某个Queue中,经历了一下几个过程:
- Producer发出消息之前,会先向NameServer发出获取Topic的路由消息请求
- NameServer返回该Topic的路由表及broker列表
- Producer根据代码中指定的Queue选择策略,从Queue列表中选出一个队列,用于后续存储消息
- Producer对消息做一些特殊处理,例如:消息本身超过4M,则对其进行压缩
- Producer向选择出的Queue所在的broker发出RPC请求,将消息发送到选择出的Queue
路由表:实际上是一个Map,key为topic名称,value是一个QueueData实例列表,QueueData 并不是一个Queue对应一个QueueData,而是一个Broker中该Topic的所有Queue对应 一个QueueData。
broker列表:实际上也是一个Map,key是brokerName,value是brokeData. 一套brokerName 名称相同的master-slave集群对应一个brokerData.BrokerData中包含 brokerName和一个map,该map的key是brokerId,value是该broker对应的地址。 brokrId为0表示该broker是master,非0表示slave。
Queue的选择算法
对于无序消息,其Queue选择算法,也称为消息投递算法,常见的有两种:
- 轮询算法
默认算法,该算法保证了每个Queue中可以均匀的获取到消息
该算法存在一个问题:由于某些原因,在某些broker上的Queue可能投递延迟比较严重。从而导
致Producer的缓存队列大量消息积压,从而影响消息投递性能。
- 最小投递延迟算法
该算法会统计每次消息投递的时间延迟,然后根据统计出的结果将消息投递到时间延迟最小的Queue,如果延迟相同,采用轮询算法投递。
该算法存在的问题:消息在Queue上的分配不均匀。投递延迟小的Queue可能存在大量的消息,
而对该Queue的消费者压力会增大,降低消息的消费性能,导致消息堆积。
标签:Producer,broker,投递,Queue,算法,消息,生产 来源: https://blog.csdn.net/weixin_42923363/article/details/123131437