Rabbitmq
消息堆积产生原因
- 生产效率和消费效率出现严重不对等,可能是生产消息速度太快,也可能是消费者服务器本身性能不够
解决办法
- 硬件上提高消费者的硬件配置
- 增强消费者消费速率,配置多个消费者,采用消费者集群,相同的routingKey中不会出现重复消费,所以无需担心
- 可以采用批量拉取消息的模式,比如有3万条消息,3个消费者,每个消费者直接拉取1万条,而不是消费一条在获取下一条,但这样做的前提是所有消费者的性能要基本相同,否则会出现不公平分配,弱消费者 和 强消费者都分配同样的消息量,会导致弱消费者负载很高,强消费者无事可做的情况
Kafka
解决办法
- 增加partition数量,同时增多consumer数量
- 把堆积的那个partition中的消息引流到其他的partition,消息分摊,并且增加consumer,增强消费能力
Kafka 与 RabbitMQ消息消费后的区别
- Rabbitmq消息消费成功后会立即删除该消息
- Kafka消息消费成功后,不会立即删除,而是通过offset来确定从哪里消费,然后通过日志删除策略来进行日志删除
Kafka中日志清理策略: https://blog.csdn.net/a645293829/article/details/122391478