PS:JMQ是公司内部的消息中间件,不同MQ之间存在数据上的差异,但理论可借鉴;
JMQ主题创建时,默认队列数为5. 即该主题在每个broker上会创建5个队列。
每个队列内的消息先进先出, 在没有打开并行消费的情况下,当队列中有消息被拉取且没有被ACK时,该队列会被加锁,其它客户端进程无法拉取到该队列上剩余消息。
所以当 客户端进程数
> 主题拥有的broker数
*主题队列数
时,客户端并发量受限。 这时增加消费者实例数会造成部分实例空闲,将不再能增加消息处理能力,增大队列数可以让客户端的线程得到充分利用。
需要注意的是:如果客户端代码中没有显示的配置最大线程数, 则默认情况下,最大线程数会被设置为队列数。 在这种情况下,调大队列数会导致客户端线程数增加, 使客户端CPU负载和内存使用率增高,存在导致客户端宕机的风险。
以jbp_mq为例:
topic:jbp_to_bu_topic
CPU/内存使用情况如下:
线程连接数: 消费者112个
broker数:4个
队列数:10个
网友评论