【博学谷学习记录】超强总结,用心分享|架构师-消息中间件MQ

一、消息队列作用

消息队列的主要是解决什么问题?主要是解决异步消息、流量削峰、应用解耦。实现高性能、高可用,可伸缩和最终一致性架构。

二、消息队列种类

常用的有rabbitmq/kafka/rocketmq

三、持久化

mq消息存储到硬盘上,服务器挂了,消息不会丢

四、分布式

消费者/生产者都可以有多个
mq主要使用在分布式场景,如果是单机,尽量不要用mq

五、通讯模式

rabbitmq使用的点对点(消息只能被消费一次,消费之后消息消失)
kafka和rabbitmq都使用的集群模式

点对点,消息只能被一个消费者消费,且只能消费一次

集群模式,对点对点的简化,即可以有多个消费者集群(不同的分组)
一条消息会被A、B集群各消费一次(广播),集群B 中有多台机器,某一台挂了,还是可以消费某消息,且也只会消费一次,可用性高

集群模拟广播-安全性可用性较高
特殊场景:比如分组A 是短信业务,分组B 邮件业务,需要同时发送。采用这种架构,安全性/可用性都较高

六、消息队列的优缺点

优点是可以解决异步消息、流量削峰、应用解耦等问题。
缺点是1、系统可用性降低;2、系统复杂性提高;3、容易出现数据不一致性问题。

七、消息队列选型

ActiveMQ—太老旧了—不推荐使用
RabbitMQ-数据丢了就找不到
延时很低—使用的推模型(kafka使用的拉模型)
推模型:mq内部主动把消息推给消费者(快)
拉模型:消费者主动去拉(循环,延时有点)
mq消息队列只是kafka中的一个功能
kafka是大数据通信中的一个组件,支持消息队列功能(但没有rocketmq完善),还有其他功能
kafka不适用于业务开发,不如rocketmq完善,性能很高,但很多功能需要自己实现
在这里插入图片描述

消息重复:RabbitMQ可控制、kafka理论上有重复、rocketmq允许重复(自己解决)
kafka通过配置可以达到消息不丢失,但是性能会变得很低
kafka做不到严格有序,rocketmq可以做到严格有序
消息有序两个级别
1/消息有序;2/严格有序
严格有序需要考虑多线程下是否有序+消息重试(该消息是否已经被某线程消费)

总结:
如果只是计算/没有业务处理,使用kafka最好
rabbitMQ—对消息堆积不友好
rocketmq—中规中矩,性能稳定(不管堆积多少消息、有多少队列、并发量大小 稳定性最好)
kafka—topic支持太多,性能会下降(数据量不大时延时反而高—不适合在线业务场景)
activeMQ—不推荐

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值