前言
不论Kafka还是RabbitMQ和RocketMQ,作为消息中间件,其作用为应用解耦、异步通讯、流量削峰填谷等。 拿我之前参加的一个电商项目来说,订单消息通过MQ从订单系统到支付系统、库存系统等,当订单信息写入MQ后就不再关心后续操作,既达到了应用解耦又达到异步通信。因为订单的并发量较大,为了避免数据库承受不住,在订单信息持久化时通过MQ+定时任务将订单信息均匀的持久到数据库中,达到削峰填谷作用。 那为什么有这么多的MQ?这些MQ又有什么区别?本文基于RabbitMQ、Kafka、RocketMQ,从侧重点、架构模型、消息通讯以及其他方面对比说明。
侧重点
每个MQ的侧重点不一样。
- RabbitMQ RabbitMQ由以高性能、健壮以及可伸缩性出名的Erlang语言编写,在扩展或删除Rabbit服务节点时只需要同步erlang信息即可。另外rabbitmq在数据可靠性的问题上做了很大的努力,它保证在这里数据是非常可靠的。
- Kafka Kafka由Scala和Java编写,与RabbitMQ不同,Kafka是一种高吞吐量的分布式消息中间件,其通过零拷贝、pagecahe技术以及分区的设计实现高吞吐,同时分区的设计也避免了消息存储瓶颈问题。
- RocketMQ RocketMQ是阿里出品的,参考Kafka架构使用Java语言重新编写的一个消息中间件,弥补了Kafka的扩展性,在Kafka基础上扩展了多种消息模式,比如延迟消息、事务消息。
架构模型
- RabbitMQ
RabbitMQ 基于AMQP协议实现,其模型如下:
Kafka与RocketMQ架构类似,RocketMQ使用NameServer代替了Zookeeper,这一点我觉得对开发人员是比较友好的,少了一个组件。
- Kafka
- RocketMQ
消息通讯
- RabbitMQ
RabbitMQ支持发布订阅、Topic及RPC多种通讯方式,满足大部分消息通讯,并支持死信队列。另外,RabbitMQ的插件社区支持丰富的插件,可通过安装插件添加额外的功能。例如,延迟队列、优先队列、管理控制台等插件。
- Kafka
相比RabbitMQ,Kafka只有单一的Topic通讯方式,消息在消费后依然不支持死信队列、延迟队列等。
- RocketMQ
RocketMQ也是基于Topic进行通讯,毕竟架构模型相似,不过RocketMQ本身支持延迟消息、事务消息等,功能比较丰富。
其他对比
RabbitMQ | Kafka | RocketMQ | |
社区活跃度 | 高 | 较高 | 一版 |
持久化 | 支持 | 支持 | 支持 |
并发吞吐 | 高 | 极高 | 极高 |
时效性 | us级 | ms级 | ms级 |
数据可靠 | 极高 | 高 | 高 |
应用场景 | 高可靠交易系统 | 日志系统、大数据应用 | 互联网高并发、高可用应用 |
总结
每个MQ的功能及作用大差不差,都有自己的优势以及不足,选择适合业务的MQ就可以。
到此这篇关于浅谈一下RabbitMQ、Kafka和RocketMQ消息中间件对比的文章就介绍到这了,更多相关RabbitMQ、Kafka和RocketMQ对比内容请搜索好代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好代码网!