目录
三、常见的几种消息队列分别有什么区别以及都分别适用哪些场景?
十、消息队列满了该怎么处理?有几百万个消息被积压了几个小时,说说如何解决?
结合使用场景来回答,例如:通过异步的方式给下游系统卷积状态数据呀;消息队列可以用来解耦/异步/削峰;
缺点:1)、系统可用性降低:如果MQ一旦故障了,那么消息提供者和消费者无法发送和消费消息,整个系统就崩了。 (如何保证高可用);2)、系统复杂性增加:不仅要考虑我们的系统,也要考虑到MQ,重复消费、消息丢失、提供消息失败,多次给MQ发送消息,消息顺序,消费者系统挂了MQ堆积了很多消息;3)、一致性问题。
优点:解耦、异步、削峰
下面将从吞吐量/时效性/可用性等几个方面来比较4款MQ;
特性 | activeMQ | rabbitMQ | rocketMQ | kafka |
吞吐量 | 万级 | 万级 | 十万级 | 十万级, kafka最大优点,一般用在实时数据计算、日志采集等等场景 |
时效性 | Ms级 | 微秒级 | Ms级 | Ms级 |
可用性 | 高, 基于主从架构实现高可用 | 非常高,分布式架构 | 非常高,分布式架构,一个数据多个副本,少数机器宕机,不会丢失消息,不会导致不可用 | |
消息可靠性 | 存在丢失可能性 | 经过参数优化配置,可以做到0丢失 | ||
核心特性 | 支持高并发,性能好,低延迟 | 分布式便于拓展 | 分布式便于拓展,功能较为简单,在大数据领域应用较多 | |
优劣势总结 | 非常成熟,功能强大, 缺点:会出现低概率的消息丢失 | 性能好,管理界面丰富,互联网公司应用较多 缺点:集群不支持动态拓展 | 简单易用,性能好,社区活跃 缺点:部分内容未开元 | 快速持久化: 高吞吐: 高堆积: 缺点:消息重复 |
新建一个topic,数量是原来的10倍,通过修改一个customer,将原本入库的消息,写到新的topic中,再将部署10倍的customer去消费这个topic中的消息。
答:我从以下四个方面考虑设计:1)、可拓展性;2)、消息持久化;3)、消息零丢失;4)、高可用;