MQ消息队列——RabbitMQ、ActiveMQ、RocketMQ、Kafka
2020-07-14 05:42
525 查看
MQ消息队列——ActiveMQ、RabbitMQ、RocketMQ、Kafka
MQ简称消息队列,主要用于实现项目之间的异步通信、解耦、消峰和分布式事务等问题
- ActiveMq是Java语言开发的,和java最是切合,在数据量不大时可以使用
-
RabbitMQ是Erlang语言开发的,在数据量大时RabbitMQ的性能比ActiveMq更强,支持集群部署
-
Kafka相当于一个分布式的MQ,传统的MQ,消息被消化掉后会被mq删除,而kafka中消息被消化后不会被删除,而是到配置的expire时间后,才删除,他把写入压力均摊到各个节点。可以通过增加节点降低压力。
-
Rocketmq是一款分布式,队列模型的消息中间件,由阿里巴巴研发,借鉴参考了JMS规范的MQ实现,更参考了优秀的开源消息中间件KAFKA,并且结合阿里实际业务需求在天猫双十一的场景,实现业务削峰,分布式事务的优秀框架。
我们项目中主要使用的还是RabbitMQ
他主要由:生产者、消费者、队列、交换机几部分注册;主要有6中工作模式:
- 简单模式:一个生产者,一个消费者
- work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一。
- 订阅模式:一个生产者发送的消息会被多个消费者获取。
- 路由模式:发送消息到交换机并且要指定路由key ,消费者将队列绑定到交换机时需要指定路由key
- topic模式:将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”匹配一个词或多个词,“*”只匹配一个词。
- 还有一种RPC模式。
特性 | 单机吞吐量 | 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不消费)
相关文章推荐
- MQ: 消息队列常见应用场景及主流消息队列ActiveMQ、RabbitMQ、RocketMQ和Kafka的简单对比
- 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?
- 常用消息队列rocketmq、rabbitmq、kafka、activemq对比
- 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?
- 关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
- 关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
- 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?
- 消息队列详解:ActiveMQ、RocketMQ、RabbitMQ、Kafka
- 关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
- 关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
- Kafka,ActiveMQ,RabbitMQ等消息队列使用的场景介绍
- 初探消息中间件Kafka、ActiveMQ、RabbitMQ、RocketMQ的优缺点
- 消息中间件kafka与activeMQ、rabbitMQ、zeroMQ、rocketMQ的比较
- 消息队列Kafka、RocketMQ、RabbitMQ的优劣势比较
- 【中间件】消息队列(一):RabbitMQ、ActiveMQ、Kafka和Redis
- Java消息队列总结只需一篇解决ActiveMQ、RabbitMQ、ZeroMQ、Kafka
- 消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型?
- 消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型?
- aliyun 消息队列 RocketMQ、Apache RocketMQ、消息队列 Kafka、Apache Kafka、RabbitMQ 产品对比
- 四种常用消息中间件比较分析(RabbitMQ、ActiveMQ、Kafka、RocketMQ)