消息队列选型(RabbitMq、RocketMq、Kafaka)

发布于:2024-04-20 ⋅ 阅读:(20) ⋅ 点赞:(0)

前言

当引入消息队列时,常见的选择包括ActiveMQ、Kafka、RabbitMQ和RocketMQ。然而,近年来,ActiveMQ的活跃度已经下降,很多公司已经不再使用这款消息队列中间件,因此在比较中不再涉及该产品。

RabbitMq

前些年使用最多的一定是RabbitMq了,直到现在被使用的频率还是很高的。
在这里插入图片描述

优点

1.可靠性高:提供强大的消息传递机制,支持消息确认、持久化等特性,确保消息可靠传递。

2.支持多种消息传递模式,如点对点、发布/订阅等,适应不同的场景需求。支持消息重试、死信队列等

3.提供了直观的管理界面,方便监控和管理队列、交换机、连接等信息。

缺点

1.吞吐量比较低,对于大型电商促销秒杀就无法胜任。

2.开发语言是erlang,懂得人不是很多,改造成本较高。

3.配置和使用相对复杂,需要理解其消息模型和特性,有一定学习曲线。

RocketMq

再说说RocketMq,近几年使用Mq中间件的香饽饽
在这里插入图片描述

优点

1、单机吞吐量十万级,可用性非常高,分布式架构;

2、经过参数优化配置,消息可以做到0丢失,RocketMQ 的所有消息都是持久化的,先写入系统 PAGECACHE,然后刷盘,可以保证内存与磁盘都有一份数据;

3、支持10亿级别的消息堆积,不会因为堆积导致性能下降;

4、源码是java,便于二次开发。

缺点

1、RocketMQ 的部署和配置相对复杂,需要理解其架构和各种配置参数,对于初学者有一定的学习曲线。

2、如果消息的消费速度远低于生产速度,可能会导致消息堆积,需要合理配置流量控制策略来避免系统故障。

Kafaka

kafka其实一般大数据相关的开发使用的比较多,很多时候kafka会用来做收集日志
在这里插入图片描述

优点

1.Kafka的最大优势是高吞吐量和低延迟,Kafka 能够处理大规模的消息并保持较低的延迟,适用于对消息处理速度有要求的场景。

2.Kafka 支持多种消息模型,包括发布/订阅、批量消费、流式处理等,适用于不同的业务场景。

  1. Kafka 提供了消息持久化机制,消息被写入磁盘并复制到多个节点,保证了消息的持久性和可靠性。

缺点

1.依赖ZooKeeper: Kafka 需要依赖 ZooKeeper 来进行节点管理和协调,增加了系统的复杂性和维护成本。

2.Kafka 的部署和配置相对复杂,需要理解其架构和各种配置参数,对于初学者有一定的学习曲线。

3.Kafka 保证了分区内消息的顺序性,但在分区间无法保证全局顺序,需要开发者自行处理消息的顺序性。

4.Kafka 将所有消息都持久化到磁盘上,可能会占用大量的硬盘资源,需要合理规划硬盘空间。

总结

其实如果一般来说你业务使用mq,对消息的安全性要求较高,选择RocketMq;

如果对于一些使用mq数据量比较大的场景,比如日志相关的,对消息的丢失要求不高的情况下,选择kafaka。