如果生产者Produce生产消息的速度超过消费者Consumer消费的速度,导致大量消息堆积未及时被消费,从而导致产生消费延迟。
消费过程包括两个阶段:
消息拉取
消息拉取的过程是按照批量拉取到缓存队列中,所需要的耗时非常低,基本不用考虑,所以主要问题在于消息消费过程
消息消费
消息消费的快慢有两个指标考量,消费耗时和消费并发度
消费耗时:
消费耗时指标主要包括CPU密集型和io密集型,在没有递归和多重循环的情况下,基本不考虑CPU密集型,而io密集型则成为主要考虑的原因。
io密集型
数据库的读写
缓存的读写
下游系统的远程调用耗时,主要包括调用服务异常和DBMS容量超限
消费并发度
在普通消息、延时消息和事务消息的情况下消费并发度一般的计算公式是节点数量*单节点的线程数量,在顺序消息的情况下,如果是全局顺序消息,为了保证消费的顺序性,消费并发度只能为1,如果是分区顺序消息,消费并发度是队列Queue数量
单机线程数设置规则:最优线程数=CPU内核数+CPU内核数*外部io操作耗时/CPU内部逻辑算耗时