消息对列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语言本身的并发优势,性能友好,但是不利于做二次维护和开发。

相关推荐
我不会起名字3222 小时前
Kafka 顺序消息为什么乱了:分区数变化与重试的 3 类原因
kafka·消息队列·顺序·排查
Sayai1 天前
Kafka 磁盘空间治理实战:retention 保留策略、log.dirs 在线扩容、分区跨盘迁移与不停机整体换盘
大数据·运维·分布式·kafka·消息队列
Shaoshing3 天前
高可用与核心概念
java·mq
张彦峰ZYF4 天前
一条消息的丢与重:Kafka 与 RabbitMQ 可靠投递的确认、位点、死信与幂等全链路
后端·kafka·消息队列·rabbitmq·isr·解耦与削峰·丢失与重复
做个文艺程序员5 天前
MQ第12篇:AI原生消息架构演进:从MQ到事件驱动的全链路设计
架构·消息队列·wpf·事件驱动架构·ai-native·cqrs
我不会起名字3226 天前
Kafka 分区数到底设几个:吞吐量、顺序性与 rebalance 代价的取舍
kafka·消息队列·调优·分区
我不会起名字3226 天前
Go 写 Kafka 消费者:sarama 的 3 个坑与优雅退出写法
kafka·消息队列·go·sarama
霸道流氓气质10 天前
MQ 异步 + 回调:外部系统集成模式详解
mq
j7~10 天前
【仿 RabbitMQ 项目】发布订阅消息队列 (篇八):交换机数据管理模块,分层类设计、SQLite 回调原理与代码实现
服务器·网络·数据库·消息队列·交换机·交换机数据管理·sqlite回调原理
做个文艺程序员12 天前
MQ第04篇:ActiveMQ深度解析:JMS规范、Spring JMS整合与企业级异步通信实战
spring·消息队列·activemq·java-activemq·jms