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数量
机器配置差,消费速度慢,消费延时太高了,那么也增加分区,然后服务扩容几台机器

08-28 00:30