1.0 为什么用MQ
优点:解耦,削峰,异步通信
缺点:增加系统的复杂性,降低系统的可用性
使用消息队列(MQ)的主要原因包括流量消峰、应用解耦、异步处理、实现分布式系统之间的解耦调用、实现异步调用、解决高并发问题等
a:流量消峰:在高峰期,通过消息队列可以分散请求,使得系统能够处理更多的请求,避免因请求过多而导致系统崩溃。
b:应用解耦:在复杂的系统中,各个子系统之间通过消息队列进行通信,减少了直接的耦合关系,提高了系统的可维护性和可扩展性
c:异步处理:通过消息队列实现服务的异步调用,减少了等待时间,提高了系统的响应速度
2.0 MQ如何选择
1:rabbitMQ:优势:轻量,开箱即用,缺点:性能一般(万级),erlang语言扩展以及二次开发成本高,大量消息堆积时,性能特别差
2:kafka:优势:性能高(几十万级),适合处理大量数据的互联网服务的数据收集业务,基于Pull模式处理消息消费,追求高吞吐量,特别适合日志收集和传输。如果业务有高性能、高吞吐量的需求。
不适合在线业务场景,当主题达到上百个时,性能会大幅下降。
3:rocketmq:优势:性能高(几十万级),国内开发社区活跃,二次开发易开发。适合业务场景使用。
3.0 MQ消息丢失问题
MQ分为生产者,MQ服务器,消费者。
丢失原因主要原因:
1:生产者不能正常请求MQ服务器
2:MQ服务器不高可用,导致服务崩
3:消费者没有正常获取MQ服务器的消息
解决方案:
1:生产者向MQ服务器发送消息,需要确定机制,同时需要支持消息重试(消息要有唯一标识,要支持幂等),补偿机制
2:MQ服务需要集群高可用,交换机,队列,数据持久化
3:消费者需要确定机制,同时要支持幂等(生产者补偿/重发)
4:监听MQ服务器消息堆积情况
5:核心数据,增加对账,T+1对账(大数据近实时),生产者+消费者数据对账,确保数据未丢失