消息对列MQ

消息队列

优点

1.实现系统解耦

2.实现异步调用

3.流量削峰

缺点

1.系统可用性降低

2.提高系统的复杂度

3.数据一致性问题

Kafka

概述

一个分布式消息发布订阅系统,一个分布式的日志提交系统。性能高效、可扩张性良好和可以持久化。它的分区特性,可复制和可容错都是其不错的特性。

优点

1.高性能:单机写入TPS约在100万条/秒,消息大小10个字节;

2.提供完全分布式架构,并有replica机制,拥有较高的可用性和可靠性,理论上支持消息的无限堆积;

3.消费者采用pull方式获取消息。消息有序,通过控制能够保证所有消息被消费且仅被消费一次;

4.在日志领域比较成熟,被多家公司和多个开源项目使用。有管理界面kafka-manager。

缺点

1.Kafka单机超过64个队列/分区,load时会发生明显的飙高现象。队列越多,负载越高,发送消息响应时间变长;

2.使用短轮询方式,实时性取决于轮询间隔时间;

3.消费失败不支持重试;

4.社区更新较慢。

Rocket MQ

概述

Java语言实现,消息可靠性比Kafka更好,广泛应用在订单、交易、充值、流计算、消息推送、日志流式处理,binglog分发等场景。

优点

1.单机支持一万以上的持久化队列;

2.RocketMQ的所有消息都是持久化的,先写入系统PAGECACHE,然后刷盘,可以保证内存与磁盘都有一份数据,而访问时,直接从内存读取;

3.模型简单,接口易用(JMS的接口很多场合并不太实用);

4.性能非常好,可以允许大量堆积消息在Broker中;

5.支持多种消费模式,包括集群消费,广播消费等;

6.各个环节分布式扩展设计,支持主从和高可用;

7.开发度较活跃,版本更新很快。

缺点

1.支持的客户端语言不多,目前时JAVA和C++,其中C++还不成熟;

2.RocketMQ社区关注度及成熟度也不及Kafka;

3.没有web管理界面,提供另一个cli管理工具带来查询、管理和诊断各种问题;

4.没有在MQ核心里实现JMS等接口

RabbitMQ

概述

一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统。

优点

1.由于Erlang语言的特性,消息队列性能较好,支持高并发;

2.健壮、稳定、易用、跨平台、支持多语言、文档齐全;

3.有消息确认机制和持久化机制,可靠性较高;

4.高度可定制的路由;

5.管理界面较丰富,在互联网公司也有较大规模的应用,社区活跃度高。

缺点

1.实现了代理架构,意味着消息在发送到客户端之前可以在中央节点上排队。此特性是的RabbitMQ易于使用和部署,但是使得其运行速度较慢,因为中央节点增加了延迟,消息封装后也比较大;需要学习比较复杂的接口和协议,学习和维护成本较高;

2.尽管结合Erlang语言本身的并发优势,性能友好,但是不利于做二次维护和开发。

相关推荐
茶杯梦轩1 天前
从零起步学习RabbitMQ || 第二章:RabbitMQ 深入理解概念 Producer、Consumer、Exchange、Queue 与企业实战案例
服务器·后端·消息队列
初次攀爬者3 天前
Kafka 基础介绍
spring boot·kafka·消息队列
初次攀爬者3 天前
RocketMQ 消息可靠性保障与堆积处理
后端·消息队列·rocketmq
初次攀爬者4 天前
RocketMQ 集群介绍
后端·消息队列·rocketmq
初次攀爬者4 天前
RocketMQ 基础学习
后端·消息队列·rocketmq
初次攀爬者5 天前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
DemonAvenger7 天前
Kafka性能调优:从参数配置到硬件选择的全方位指南
性能优化·kafka·消息队列
Javatutouhouduan9 天前
RocketMQ是怎么保存偏移量的?
java·消息队列·rocketmq·java面试·消息中间件·后端开发·java程序员
DemonAvenger9 天前
深入理解Kafka分区策略:实现数据均衡分布的最佳实践
性能优化·kafka·消息队列
予枫的编程笔记10 天前
【Kafka进阶篇】Kafka消息重复消费?Exactly-Once语义落地指南,PID+事务消息吃透
人工智能·kafka·消息队列·exactly-once·分布式消息·kafka幂等性·kafka事务消息