您的位置:首页 > 其它

MQ消息队列——RabbitMQ、ActiveMQ、RocketMQ、Kafka

2020-07-14 05:42 525 查看

MQ消息队列——ActiveMQ、RabbitMQ、RocketMQ、Kafka

 

MQ简称消息队列,主要用于实现项目之间的异步通信、解耦、消峰和分布式事务等问题

 

  1. ActiveMq是Java语言开发的,和java最是切合,在数据量不大时可以使用
  2. RabbitMQ是Erlang语言开发的,在数据量大时RabbitMQ的性能比ActiveMq更强,支持集群部署

  3. Kafka相当于一个分布式的MQ,传统的MQ,消息被消化掉后会被mq删除,而kafka中消息被消化后不会被删除,而是到配置的expire时间后,才删除,他把写入压力均摊到各个节点。可以通过增加节点降低压力。

  4. Rocketmq是一款分布式,队列模型的消息中间件,由阿里巴巴研发,借鉴参考了JMS规范的MQ实现,更参考了优秀的开源消息中间件KAFKA,并且结合阿里实际业务需求在天猫双十一的场景,实现业务削峰,分布式事务的优秀框架。

我们项目中主要使用的还是RabbitMQ

他主要由:生产者、消费者、队列、交换机几部分注册;主要有6中工作模式:

  • 简单模式:一个生产者,一个消费者
  • work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一。
  • 订阅模式:一个生产者发送的消息会被多个消费者获取。
  • 路由模式:发送消息到交换机并且要指定路由key ,消费者将队列绑定到交换机时需要指定路由key
  • topic模式:将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”匹配一个词或多个词,“*”只匹配一个词。
  • 还有一种RPC模式。
MQ集锦
特性 单机吞吐量 topic数量对吞吐量的影响 时效性 可用性 消息可靠性 功能支持
ActiveMQ 万级,比RocketMQ、Kafka低一个数量级   ms级 高,基于主从架构实现,高可用 有较低的概率丢失数据 MQ领域的功能及其完备
RabbitMQ 万级,比RocketMQ、Kafka低一个数量级   微妙级,这是RabbitMQ的一大特点,延迟最低 高,基于主从架构实现,高可用   基于erlang开发,并发能力很强,性能极好,延时很低
RocketMQ 10万级,支持高吞吐 topic可以达到几百/几千的级别,吞吐量会较小幅度的下降,这是RocketMQ的一个大优势,在同等机器下,可以支撑大量的topic ms级 非常高,分布式架构 经过参数优化配置,可以做到0丢失 MQ功能较为完善,还是分布式的,扩展性好
Kafka 10万级,高吞吐,一般配合大数据的系统来进行实时数据计算、日志采集 topic从几十到几百个的时候,吞吐量会大幅度下降,在同等机器下,kafka尽量保证topic数量不要过多,如果要支撑大规模的topic,需要增加更多的机器资源 延迟在ms级以内 非常高,分布式,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用 经过参数优化配置,可以做到0丢失 功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用

 

RabbitMQ为了保证性能,一般情况下消息并不是完全可靠的,可以通以上3个方法考虑保证消息的可靠性:

1、如何保证消息放入队列中:

方法1:开启mq事务(效率明细降低,不选择)

方法2:普通confim确认模式(效率同样有点低)

方法3:批量confirm确认模式(可以,经常有消息放入失败时,可能造成重复消费)

方法4:异步confirm确认模式(最好的方式,通过异步监听来确保消息放入队列)

2、保证队列中的消息不因为宕机而丢失: 开启MQ持久化

3、防止消息在消费端丢失: 开启ACK机制;

开启ACK机制可能照成消息重复消费;(再消息发送端给每个消息生成唯一id,消费端用redis和这个id做分布式锁;即:用id做key,调用redis的setnx方法;返回1正常消费;返回0不消费)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐