Kafka 和 MQ 的区别

饭宝  论坛元老 | 2025-1-22 21:11:01 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1038|帖子 1038|积分 3114

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.概述

1.1.MQ简介

消息中心件,实在准确的叫法应该叫消息队列(message queue),简称MQ。其本质上是个队列,有FIFO的性质,即first in first out,先入先出。
目前市场上主流的MQ有三款:

  • RabbitMQ
  • RocketMQ
  • Kafka

1.2.MQ的应用场景

MQ一般用在几种场景:

  • 流量削锋
  • 应用解耦
  • 异步使命
1.流量削锋
流量过大的时间,用MQ作为一个中心层,临时存储流量,让流量在队列中列队去访问服务,从而控制直接访问服务的流量,减轻服务的实时流量压力。
以网购下订单为例:

2.应用解耦
利用MQ作为应用之间的中心层,从而使得应用之间不存在直接调用的关系,解除应用之间的耦合。这样在被调用的应用挂掉以后,应用之间的调用不会直接产生异常,请求仍可以正常发送,待被调用应用重新起来以后,再去消费处置惩罚MQ中积压的调用请求,为系统的修复夺取到了时间。
以付出系统为例:

3.异步使命
有些服务调用对于响应的实时性要求不高,答应延迟响应、异步处置惩罚。利用MQ可以将这些可以异步处置惩罚的请求,暂存在队列中,调用方不必等待,直接向下实行其他使命,被调用方消费MQ中消息后自行返回给调用方响应。


1.3.关注MQ的角度

市面上的MQ数量众多、种类繁杂,但MQ其本质上就是用来临时存放消息的一种中心件,从三个角度去关注MQ即可捉住MQ的核心:

  • 消息可靠性
  • 消息模型
  • 吞吐量
1.消息可靠性
消息可靠性,即消息会不会丢失?围绕防止消息丢失做了哪些工作?
2.消息模型
消息模型,即支持以什么样的模式去消费消息?点对点?广播?发布订阅?其消息模型丰富度怎样?
3.吞吐量
MQ作为用来减轻系统压力的中心件,其自身势必会经常面对很大的流量,吞吐量怎样天然是要考虑的。
本文在末了横向对比三大MQ的时间就会从以上三点出发。除了以上三点,另有一点是值得额外关注的,就是扩容是否方便,便是否在架构上能很好的支持分布式架构。固然这不是核心点,要扩容怎么都能扩,只是看方便与否。

2.RabbitMQ

RabbitMQ有几个特点:

  • 遵从AMQP协议
  • 丰富的消息模型极
  • 消息可靠性高但是吞吐量不高
1.遵从AMQP
AMQP简单来说就是规定好了MQ的各个抽象组件,RabbitMQ则是一款完全严酷按照AMQP来实现的开源MQ,使得很好被开源框架所集成,比如Spring AMQP专门就是用来操纵AMQP架构中心件的,因此RabbitMQ可以被Spring Boot很方便的集成。
2.丰富的消息模型
RabbitMQ也是三大MQ里提供的消息模型最丰富的一种MQ。(六大消息模型:简单队列;工作队列;订阅模式;路由模式;主题模式;RPC)
3.消息可靠性高但是吞吐量不高
RabbitMQ 提供了多种机制来确保消息的可靠性,包括长期化、消息确认、发布确认等。这些机制确保消息不会丢失,而且可以或许在各种环境下处置惩罚消息传递失败。但是由于存在这些用于保证消息可靠性的机制,RabbitMQ的吞吐量在三大中心件中是最低的

3.RocketMQ

RocketMQ是一款开源的分布式消息中心件,最初由阿里巴巴集团开辟并开源。它旨在为分布式系统提供可靠、高性能、可扩展的消息通讯能力。其已经是阿里内部最核心的消息中心件,用来保证每年双十一期间系统的稳定。
RocketMQ有以下几个特点:

  • 天生的分布式架构
  • 兼顾消息可靠性和高吞吐量
  • 消息模型够用
1.天生的分布式架构
RocketMQ 的设计采用了分布式架构,可以将消息存储和处置惩罚分散到多个节点上。这样可以实现消息的并行处置惩罚,进步系统的吞吐量和并发性能。整个RocketMQ集群的架构和微服务架构类似,有一个存放节点信息的name server,生产者和消费者都去找name server拿broker的信息,再去定位到具体的某一个broker上,举行消息的收发。 broker之间可以用主从的方式举行相互备份,举行容错。

2.兼顾消息可靠性和高吞吐量
可靠性和吞吐量实在是互斥的两点,为了保证可靠性,消息就一定要落在磁盘存储防止断电丢失。落在磁盘存储后,读这条消息的时间的磁盘IO就会拉低吞吐量。以是RocketMQ的核心实在就是数据落磁盘,然后想尽统统办法来进步吞吐量。RocketMQ主采用了顺序读写、异步刷盘、零拷贝三大机制来拉升了吞吐量。
3.消息模型够用
RocketMQ的消息模型没有RabbitMQ那么全面,但是根本的点对点、广播、发布订阅、事务等都是有的,面对绝大多数场景根本上是够用的。

4.Kafka

Kafka实在和RocketMQ很相似,一款具有高吞吐量、高可靠性的分布式消息中心件。其采用分布式架构顺序写序列化零拷贝等机制保证了高吞吐量,数据自动落磁盘完成长期化来保证消息不会丢失。

5.三个MQ的对比

在现实开辟中,要用到MQ时,MQ的选型是很重要的,选型的底子是一定要了解MQ的特点和实用的场景。
Kafka:
优点:
吞吐量:Kafka的设计目的是实现高吞吐量的消息传递,拥有很大的吞吐量,实用于处置惩罚大量的实时数据流。
扩展性:Kafka采用分布式架构,答应构建具有高可用性和可伸缩性的消息系统。
可靠性:Kafka将消息长期化到磁盘上,可以长期生存数据,并支持高效的消息回放。
缺点:
复杂性:Kafka的配置和管理相对较复杂,需要一定的学习和运维成本。
实时性:由于Kafka是批量处置惩罚数据的,而且需要在分区之间举行数据的复制和同步,以是相对于其它MQ,kafka会存在一定延时。
功能丰富度:支持的消费模式比较单一。

RabbitMQ:
优点:
功能丰富度:RabbitMQ支持灵活的路由机制和多种消息模式,如点对点、发布-订阅和主题订阅等。
可靠性:RabbitMQ通过消息确认机制和长期化可以保证消息的可靠传递。
兼容性:RabbitMQ利用标准的AMQP协议,支持跨语言和平台的互操纵性。
缺点:
吞吐量:没有做拉升吞吐量的优化以是相比于其他消息队列系统,RabbitMQ的吞吐量较低
扩展性:RabbitMQ的集群管理较为复杂,需要许多额外的配置和管理。

RocketMQ:
优点:
高吞吐量和低延迟:RocketMQ是为处置惩罚大规模数据流设计的,具有高吞吐量和低延迟的特点。
可靠性:存在长期化机制、确认机制,具有高可靠性。
扩展性:RocketMQ支持水平扩展,可以通过添加更多的节点来进步系统的性能和容量。
缺点:
社区支持:相对于Kafka和RabbitMQ,RocketMQ的社区支持相对较弱。
功能丰富度:RocketMQ在功能上相对较为简化,大概不实用于复杂的消息处置惩罚场景。

实用场景:
RabbitMQ实用于对消息可靠性要求高或者灵活的消息路由和多种消息模式的场景,如使命队列、发布-订阅和事件驱动架构。
Kafka虽然存在一些延时,但是这个延时并不会很大,总体上来说Kafka和RocketMQ实用的场景是高度重叠的,RocketMQ和Kafka都专注于高吞吐量和低延迟的场景,因此它们都实用于需要处置惩罚大规模数据流和实时消息传递的应用。Kafka在大数据范畴具有广泛的应用,与Hadoop、Spark等工具有良好的集成。RocketMQ在互联网范畴应用较为广泛,实用于电商、物流等场景。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表