如何调整MQ的吞吐量
1. kafka和RocketMQ一个cosumer可以消费多个分区/队列 (平摊) 比如有8个分区/队列,三个消费者机器,那么每个消费者消费的分区/队列的个数分别是 3、3、2: 2. 单机多线程消费: RocketMQ 设置某一个单例的consumer 对象的Pool Thread Num 来实现多线程消费,内部实现了一个ThreadPoolExcutors(setConsumeThreadMin、setConsumeThreadMax); kafka里面的consumer是线程不安全的,只能在一个thread里面pull,但是可以同时创建多个线程,每个线程里面实例化一个consumer实现多线程消费。无论是Kafka还是RocketMQ,他们同时消费的能力是受限于分区或者队列的数量。 但是单机多线程消费一定要控制好线程数量,避免数量设置的过多导致CPU负载过高,就失去了MQ的削峰填谷的作用. 3. 根据消费服务的机器配置、消费速度、容忍的消费延时 “反推”应该配置多少分区. 机器配置高,消费速度快 ,cpu总是闲着,那么就增加分区,然后增加kafka单机cosumer数量 机器配置差,消费速度慢,消费延时太高了,那么也增加分区,然后服务扩容几台机器 来源: https://my.oschina.net/u/4129361/blog/3098239