本文主要是介绍ActiveMQ、RocketMQ、RabbitMQ、Kafka,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
特点:解耦、异步、削峰
特性 | ActiveMQ | RabbitMQ | RocketMQ | kafka |
---|---|---|---|---|
开发语言 | java | erlang | java | scala |
单机吞吐量 | 万级 | 万级 | 10万级 | 10万级 |
时效性 | ms级 | us级 | ms级 | ms级以内 |
可用性 | 高(主从架构) | 高(主从架构) | 非常高(分布式架构) | 非常高(分布式架构) |
功能特性 | 成熟的产品,在很多公司得到应用;有较多的文档;各种协议支持较好 | 基于erlang开发,所以并发能力很强,性能极其好,延时很低;管理界面较丰富 | MQ功能比较完备,扩展性佳 | 只支持主要的MQ功能,像一些消息查询,消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用广。 |
如何保证消息队列是高可用的?
以rcoketMQ为例,他的集群就有多master 模式、多master多slave异步复制模式、多 master多slave同步双写模式。
如何保证消息不被重复消费?= 如何保证消息队列的幂等性?
- RabbitMQ是发送一个ACK确认消息
- RocketMQ是返回一个CONSUME_SUCCESS成功标志
- kafka消费过消息后,需要提交offset,让消息队列知道自己已经消费过了
- 数据库唯一主键
- redis的set的操作
- 以redis为例,给消息分配一个全局id,只要消费过该消息,将<id,message>以K-V形式写入redis。那消费者开始消费前,先去redis中查询有没消费记录即可。
如何保证消费的可靠性传输?
三个角度来分析:生产者弄丢数据、消息队列弄丢数据、消费者弄丢数据
如何保证消息的顺序性?
保证入队有序就行,出队以后的顺序交给消费者自己去保证,没有固定套路。
这篇关于ActiveMQ、RocketMQ、RabbitMQ、Kafka的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!