MQ的大致介绍
what is MQ?
MQ:
MessageQueue
,消息队列。 队列,是一种FIFO 先进先出的数据结构。消息由生产者发送到MQ进行排队,然后按原来的顺序交由消息的消费者进行处理。QQ和微信就是典型的MQ。
MQ的主要作用和优缺点
作用和优点:
异步、解耦、削峰
缺点:
系统可用性降低、系统复杂度提高、消息一致性问题
MQ三巨头的比较
RockertMQ
弥补了 kafka
和 rabbitmq
的缺点场景
Kafka | RocketMq | RabbitMQ | |
---|---|---|---|
关注度 | 高 | 中 | 高 |
成熟度 | 成熟 | 比较成熟 | 成熟 |
所属社区/公司 | Apache | Alibaba Apache | Mozilla Public License |
社区活跃度 | 高 | 中 | 高 |
文档 | 多 | 中 | 多 |
特点 | 吞吐量与消息积累都很强大Topic 太多会影响性能。 | 各个环节分布式扩展设 计,主从 HA;支持上万个队列;多种消费模式; 性能很好 | 由于Erlang 语言的并发能力,性能很好 |
授权方式 | 开源 | 开源 | 开源 |
开发语言 | scala | Java | Erlang |
支持的协议 | 一套自行设计的基于 TCP 的二进制协议 | 自己定义的一套(社区提供JMS--不成熟) | AMQP |
客户端支持语言 | C/C++,Python,Go,Erlang,Java 等 | JavaC++(不成熟) | Java、C、C++、Python、PHP、Perl、.net 等 |
持久化 | 磁盘文件 | 磁盘文件 | 内存、文件 |
事务 | 不支持 | 支持 | 不支持 |
集群 | Zookeeper | Nameserver | |
单机支持的队列 | 单机超过 64 个队列,性能会明显下降 | 单机最高支持 5W 个队列, 性能没有明显变化 | 依赖于内存 |
定时消息 | 不支持 | 开源版仅支持定时Level | 不支持 |
顺序消费 | 支持顺序消费,但是一台Broker 宕机后,顺序会乱 | 支持顺序消费,在顺序消费场景下,消费失败时消费队列将会暂停 | 支持顺序消费,但是一台Broker 宕机后,顺序会乱 |
负载均衡 | 支持 | 支持 | 支持 |
管理界面 | 无 | 无 社 区 有 web console 实现 | 好 |
部署依赖 | zookeeper | Nameserver | Erlang 环境 |
消费方式 | 保证严格的消费顺序 | ||
总结:优点 | 1、高吞吐、低延迟、高性能2、提供多种客户端语言3、生态完善,大数据处理方面的必备工具 | 模型简单,接口易用。在阿里大规模应用。目前支付宝中的余额宝等新兴产品均使用 rocketmq。集群规模大概在 50 台左右,单日处理消息上百亿;性能非常好,可以大量堆积消息在broker 中;支持多种消费,包括集群消费、广播消费等。开发度较活跃, 版本更新很快。 | 由于erlang 语言的特性, mq 性能较好;管理界面较丰富,在互联网公司也有较大规模的应用;支持amqp 协议,有多种语言且支持amqp 的客户端可用 |
总结:缺点 | 消费者集群数受到分区数的限制单机Topic 过多,性能会明显下降不支持事务。容易丢数据。 | 使用者较少,生态不够完善,消息堆积与吞吐量上与kafka 还是有差距。客户端支持java | Erlang 语言难度较大,集群不支持动态扩展。不支持事务,消息吞吐能力有限消息堆积时,性能会明显降低。 |
评论区