Kafka、RocketMQ、RabbitMQ 对比

embedded/2024/12/28 3:49:54/

面试中对 KafkaRocketMQ 、和 RabbitMQ 的对比是常见问题,可以从以下几个维度进行分析:


1️⃣ 基础概念

特性KafkaRocketMQRabbitMQ
开发语言Java + ScalaJavaErlang
定位分布式流处理平台分布式消息中间件高效、可靠的消息队列
消息模型Topic ,基于分区和偏移量Topic/Queue ,基于主题Exchange/Queue ,基于路由键
开源组织Apache Software FoundationApache Software FoundationPivotal Software Foundation

2️⃣ 性能对比

吞吐量

  • Kafka
    • 高吞吐量,适合大数据实时流处理,依赖磁盘顺序写和零拷贝,支持百万级 QPS。
  • RocketMQ
    • 适合高并发场景,QPS 高,性能优于 RabbitMQ,但低于 Kafka。
  • RabbitMQ
    • 使用 AMQP 协议,消息可靠性强,但性能较 Kafka 和 RocketMQ 稍弱。

延迟

  • Kafka
    • 延迟相对较高,适合对吞吐量要求高、延迟不敏感的场景。
  • RocketMQ
    • 延迟在毫秒级,适合金融等对实时性要求高的场景。
  • RabbitMQ
    • 延迟最低,适合对消息实时性要求极高的场景。

3️⃣ 可靠性

特性KafkaRocketMQRabbitMQ
消息丢失通过ACK 、ISR 确保,支持高可靠性通过ACK和主从同步确保通过ACK和镜像队列确保
事务支持支持(但性能会受影响)支持不直接支持,需要业务实现

4️⃣ 使用场景

  • Kafka
    • 日志采集 :大数据和日志实时分析。
    • 流式处理 :适合数据流的分发、分析。
    • 消息队列 :部分场景可作为传统消息队列使用。
  • RocketMQ
    • 电商场景 :如订单状态、库存管理。
    • 金融领域 :对消息可靠性和顺序性要求高。
    • 定时/延迟任务 :支持天然延迟队列。
  • RabbitMQ
    • 即时消息 :如聊天消息。
    • 任务分发 :分布式任务处理。
    • 复杂路由 :通过交换器实现灵活消息路由。

5️⃣ 易用性

特性KafkaRocketMQRabbitMQ
配置难度配置复杂,需掌握分区、副本等概念配置适中配置简单,但需熟悉 AMQP 协议
运维成本高,依赖 Zookeeper(或 Kafka Raft)中,高度兼容 Java 开发者中,需了解 Erlang 生态

总结对比表格 🧾

特性KafkaRocketMQRabbitMQ
吞吐量⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
延迟⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
可靠性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
运维成本⭐⭐⭐⭐⭐⭐⭐⭐⭐
使用场景大数据、日志分析电商、金融、延迟任务实时消息、复杂路由

http://www.ppmy.cn/embedded/149349.html

相关文章

信息抽取(NLP)是什么技术有哪些应用?

信息抽取是将非结构化的信息转化为结构化信息的过程。一般应用于电商平均分析、知识图谱和大模型训练。 不同模型的对比 1. 规则模型 优点 简单直观:基于人工设定的规则,不需要大量的数据集进行训练,只要规则制定者对目标信息有清晰的理解即可开始构建。例如,对于一些具有…

taro中实现带有途径点的路径规划

前言 taro中实现带有途径点的路径规划 import React, {useState, useEffect} from "react"; import {View, Map, ScrollView} from tarojs/components import Taro, {useRouter} from tarojs/taro; import request from ../../request; import api from ../../reque…

Spring Boot 中 Map 的最佳实践

在Spring Boot中使用Map时,请遵循以下最佳实践: 1.避免在Controller中 直接使用Map。应该使用RequestBody 接收-个DTO对象或者 RequestParam接收参数,然后在Service中处 理Map。 2.避免在Service中 直接使用原始的Map。应该使用Autowired 注入-个专门…

elementUI——upload限制图片或者文件只能上传一个——公开版

最近在写后台管理系统时,遇到一个需求,就是上传图片,有且仅能上传一张。 效果图如下: 功能描述:上传图片时,仅支持单选,如果上传图片成功后,展示图片,并隐藏添加图片的…

Linux shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件

Linux Debian12基于ImageMagick图像处理工具编写shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件,”多个图片分开生成多个PDF文件“或者“多个图片合并生成一个PDF文件” BiliBili视频链接: Linux shell脚本对常见图片格式批量转换…

Qt笔记:网络编程UDP

一、铺垫 1.Qt框架使用的网络结构的基础就是Linux学习的网络编程基础;所以使用Qt写客户端,使用Linux写服务端;两者是可以实现互联的 二、UDP 网络编程UDP使用套路: 1.首先在.pro文件中加上network,使Qt可以搭载网络…

将 ASP.NET Core 应用程序的日志保存到 D 盘的文件中 (如 Serilog)

将 ASP.NET Core 应用程序的日志保存到 D 盘的文件中,可以使用第三方日志库(如 Serilog)来实现。Serilog 是一个流行的日志库,支持将日志输出到文件、控制台、数据库等多种目标。 以下是实现步骤: 1. 安装 Serilog 相…

构建一个rust生产应用读书笔记7-Mock编码浪子

编写单元测试是确保代码质量、稳定性和可维护性的关键步骤,尤其是在采用测试驱动开发(TDD)方法时。对于 EmailClient 组件的测试,我们确实应该从小处着手,先保证组件本身的功能正确无误,然后再逐步集成到更…