【java开发消息中间件MQ篇】之Kafka、ActiveMQ、RabbitMQ、RocketMQ 对比

240 阅读4分钟

前言: mq的种类很多,知识点也很多,容我娓娓道来,此文章仅代表鄙人的总结和理解,如有错漏,欢迎指正...

使用mq的好处与缺点

消息队列的三大好处:解耦、异步、削峰
解耦:
在多台服务器中,老方式就是通过调用接口的方式进行传递交互。使用mq的话就可以解耦了,直接消费mq即可。MQ,就是一个Pub/Sub 发布订阅消息模型

异步:
老方式中,调用多个不同服务器的接口,特别耗费时间。使用mq之后能够大大加快速度,用户体验更好

削峰:
高并发的时候,一般的mysql数据库就是2k每秒的处理能力,但是高并发时是5k每秒的请求,数据库是扛不住的。那么使用mq进行设置每秒消费2000个,多出来的积压在mq中,慢慢被消费,那么就起到了削峰的目的。

使用消息队列的缺点:
1.系统可用性降低,系统引入外部依赖越多越容易挂掉,如果mq挂掉了咋办?
2.系统复杂度提高,如何保证mq不重复消费、怎么处理消息丢失的情况、如何保证消息传递的顺序性?
3.一致性的问题,如果某个消费者失败报错了,数据就不一致了,也是个大问题。

以上问题如何处理,请移步翻阅参考我【java开发消息中间件MQ篇】系列文章...

Kafka、ActiveMQ、RabbitMQ、RocketMQ 优缺点


总结:
ActiveMQ:最早被使用的MQ,没经过大规模吞吐量场景的验证,社区不活跃,不推荐使用
RabbitMQ:开源、稳定、社区活跃、中小型企业推荐使用
RabbitMQ:阿里出品,开源,分布式的,消息0丢失,社区不活跃,分布式项目推荐使用
Kafka:大数据领域的实时计算、日志采集等,社区活跃,大数据项目推荐使用

mq消息一般怎么发送

一般来说都是传字符串或者封装一个实体类,实体类一般有两个字段:
1、action: 表示本次消息是什么消息,比如商品更新消息还是商品删除消息;
2、itemCode: 所变更或删除商品的货号(或者商品的ID)。

mq集群

主备模式,也称为 Warren (兔子窝) 模式。
实现 rabbitMQ 的高可用集群,一般在并发和数据量不高的情况下,这种模式非常的好用且简单。
也就是一个主/备方案,主节点提供读写,备用节点不提供读写。
如果主节点挂了,就切换到备用节点,原来的备用节点升级为主节点提供读写服务,当原来的主节点恢复运行后,原来的主节点就变成备用节点,和 activeMQ 利用 zookeeper 做主/备一样,也可以一主多备。

广播消费与集群消费

广播消费,订阅该 Topic 的消息者们都会消费每个消息。

集群消费,订阅该 Topic 的消息者们只会有一个去消费某个消息

广播消费与集群消费在消息落盘区别: 具体表现在消息消费进度的保存上。

广播消费,由于每个消费者都独立的去消费每个消息,因此每个消费者各自保存自己的消息消费进度。
集群消费下,订阅了某个 Topic,而旗下又有多个 MessageQueue,每个消费者都可能会去消费不同的 MessageQueue,因此总体的消费进度保存在 Broker 上集中的管理

broker可以理解为mq服务器,可以做集群的。

更多相关【java开发消息中间件MQ篇】系列文章,请查阅我的个人博客哦...


结语:以往都是看别人的博客进行学习技术,其中不乏有精华博客也有吊儿郎当的CV大法文章,所以决定将自己所学所用所整理的知识分享给大家,主要还是想为了后浪们少走些弯路,多些正能量的博客,如有错漏,欢迎指正,仅希望大家能在我的博客中学到知识,解决到问题,那么就足够了。谢谢大家!(转载请注明原文出处)