工具篇8--Rabbitmq,RocketMq,kafka 消息模型对比

本文对比了RabbitMQ,RocketMQ和Kafka在消息发送特点、消息存储、消息接收和消息模型上的异同,并探讨了根据业务场景、性能指标和生态系统如何进行消息中间件的技术选型。RabbitMQ适合需要消息确认和持久化的场景,RocketMQ适用于高吞吐和实时数据传输,而Kafka则在大规模数据处理和高吞吐量上表现出色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

本文对之前介绍的Rabbitmq,RocketMq,kafka 消息模型特定进行对比,并探究在实际开发中如何进行技术选型。


一、几种模型的对比:

1. 消息发送特点:

1.1 相同点:

  • Rabbitmq,RocketMq,kafka 消息发送失败均提供重试策略;
  • Rabbitmq,RocketMq,kafka 的消息 均提供集群消息和广播消息的发送;

1.2 不同点:

  • 消息类型:Rabbitmq,RocketMq 支持延迟消息的发送,而kafka 不支持;其中,Rabbitmq可以通过死信队列或者插件的方式实现;RocketMq 提供了按照延迟的级别实现;
  • 消息的批量发送:RocketMq,kafka都支持消息的批量发送,而Rabbitmq 是将多条消息压缩为一条消息进行发送,严格来说Rabbitmq 并不支持批量发送消息;
  • 消息的发送方式:RocketMq,kafka 消息都是发送到topic 中;Rabbitmq 的消息需要发送到交换机,然后通过路由建完成消息的路由;
  • Rabbitmq,RocketMq 提供了web 的管理界面,kafka 没有web界面需要按照第三方;

2. 消息存储:

2.1 相同点:

  • Rabbitmq,RocketMq,kafka 的消息都进行了持久化,且都有备份;Rabbitmq通过镜像队列进行数据备份;,RocketMq 通过队列的副本进行数据备份;kafka 通过副本分区进行数据备份;

2.2 不同点:

  • RocketMq 中一个topic 下有多个队列,多个队列可以分布在不同的broker 上 ; kafka 中一个topic 下有多个分区,每个分区可以分布在不同的broker 上;Rabbitmq 中的一个队列就时只有一个队列;

3. 消息接收:

3.1 相同点:

  • Rabbitmq,RocketMq,kafka 均支持批量消费消息;
  • Rabbitmq,RocketMq,kafka 均支持手动提交ack;
  • Rabbitmq,RocketMq,kafka 均支持消费失败的重试;

3.2 不同点:

  • 消费模型:RocketMq,kafka 只支持pull 模式;Rabbitmq 支持pull和poll模式;
  • 过滤消息:RocketMq 支持通过消息的tag 过滤消息,kafka 和Rabbitmq 不支持;
  • 消息的消费:RocketMq,kafka 消费某个或者多个topic,Rabbitmq 消费一个或者多个队列;
  • 历史消息:RocketMq,kafka 可以消费历史消息,Rabbitmq 在消息消费后就进行了删除,不支持消费历史消息;
  • 消费失败重试 Rabbitmq,RocketMq, 均支持消费失败的重试;kafka 不支持消费失败的重试;

4. 消息模型:

Rabbitmq,RocketMq,kafka 三者都是基于发布/订阅模型,支持集群部署;

二、消息选型:

1.业务场景:

  • 如果业务中消息量非常的大,并且消息需要快速消费,kafka 更加适合,因为其诞生支出就是为了处理社交平台的大量消息,可以达到20万级 QPS,Rabbitmq,RocketMq 稍微差一点儿可以达到10万级 QPS;
  • 如果业务中强调消息的准确性和可靠性, RabbitMQ 和 RocketMQ 都是不错的选择,尤其是RocketMQ 诞生之初就是为了处理金融类的消息;

2.性能指标:

  • 如果需要处理大规模数据的高吞吐量场景, Kafka 是最佳选择。Kafka 提供了非常高的吞吐量和低延迟,支持每秒处理数百万条消息;
  • 如果需要对低延迟消息进行实时处理, RocketMQ 更适合。RocketMQ 处理小消息时延迟非常低,适合实时数据传输和实时计算;
  • 如果需要保证消息不丢失和交付, RabbitMQ 优于其他消息队列,因为它支持消息确认机制和消息持久化;

3.生态系统:

  • RabbitMQ 生态系统较为成熟,有很多语言和框架的客户端支持。它的社区活跃,文档和插件齐全,易于上手;
  • RocketMQ 技术栈基本上是围绕 Java 和 Spring Framework 的。它支持主流的开源框架和应用,社区活跃度较高;
  • Kafka 提供了多种编程语言的客户端,支持 Spark、Flink、Storm 等流处理框架,并且有成熟的生态系统和社区支持;

三、总结:

本文简单总结了三种消息的特点,以及对消息技术选型提供一些基本的思路,这三种中间件各有优缺点,需要根据自己的业务需求、性能要求和技术栈来选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值