kafka、rocketmq、rabbitmq,有什么区别

kafka、rocketmq、rabbitmq,有什么区别

这三个是消息队列领域最主流的中间件,经常被拿来比较。我从几个核心维度帮你梳理清楚。

复制代码
中间件	一句话概括
Kafka​	分布式流平台,为高吞吐、大数据场景而生
RocketMQ​	阿里开源,金融级可靠,兼顾吞吐与事务
RabbitMQ​	老牌消息代理,协议丰富,路由灵活,易上手

核心维度对比
1. 吞吐量
	      Kafka	                    RocketMQ	                          RabbitMQ
单机吞吐	十万~百万级/秒​	        十万~百万级/秒​	                       万级/秒
特点	    顺序写盘+零拷贝,极致优化	  类似Kafka设计,文件顺序写	              Erlang写的,但架构决定了天花板

如果你日消息量过亿,基本只有 Kafka 和 RocketMQ 可选。
  1. 消息可靠性

    复制代码
     Kafka	RocketMQ	                                                   RabbitMQ

    消息丢失 可配置为0丢失(acks=all + 副本) 支持同步刷盘+同步复制,金融级 支持持久化+confirm机制
    事务消息 支持(但较复杂) 原生支持分布式事务消息​ 不支持
    至少一次投递 ✅ ✅ ✅
    精确一次语义 ✅(0.11+支持幂等+事务) ❌ ❌

  2. 消息模型

    复制代码
    	       Kafka	                           RocketMQ	                       RabbitMQ
    消费模型	Pull(消费者主动拉)	               Pull + Push​ 封装	              Push(服务端推)
    消费模式	队列模型(Consumer Group)	         队列+发布订阅	                 Exchange绑定Queue
    顺序消息	分区内有序	                          分区内有序,支持全局顺序          单队列有序

4. 功能特性

Kafka RocketMQ RabbitMQ
延迟消息 ❌(需外部方案) ✅ 原生支持(18个级别) ✅ 插件支持
死信队列
消息重试 ❌(需自己实现) ✅ 自动重试
消息回溯 ✅ 按offset回溯 ✅ 按时间回溯
消息追踪 ✅ 有消息轨迹 需插件
  1. 运维复杂度

    Kafka RocketMQ RabbitMQ
    部署难度 中等(依赖ZK/KRaft) 中等 简单
    监控管理 丰富(Kafka Manager等) 有控制台 Web管理界面友好
    集群扩展 灵活 灵活 相对麻烦
  2. 生态与社区

    Kafka RocketMQ RabbitMQ
    社区活跃度 极高 活跃(Apache顶级项目) 活跃
    流处理生态 Kafka Streams, Flink, Spark 有,但不如Kafka丰富
    多语言支持 全(AMQP协议)
    云厂商支持 全面 阿里云深度支持 全面

    选 Kafka 如果:
    ✅ 日志收集、大数据管道、流计算
    ✅ 超高吞吐量(百万/秒级别)
    ✅ 需要消息回溯、流处理生态
    ✅ 业务对延迟不敏感(ms级可接受)

    选 RocketMQ 如果:
    ✅ 电商交易、金融支付场景
    ✅ 需要分布式事务消息
    ✅ 需要延迟消息、顺序消息
    ✅ 阿里技术栈,或国内业务为主

    选 RabbitMQ 如果:
    ✅ 业务系统解耦、异步处理
    ✅ 复杂路由规则(topic/direct/headers/fanout)
    ✅ 吞吐量要求不高(万级/秒够用)
    ✅ 团队希望开箱即用、运维简单

    简单类比

    Kafka​ 像高速公路,车道多、跑得快,但收费站(功能)少

    RocketMQ​ 像高铁,速度快、准点率高、有安检(事务),适合关键线路

    RabbitMQ​ 像城市公交,线路灵活、站点多(路由丰富),但运力有限

各个服务的使用场景:

Kafka 使用场景详解

  1. 日志收集与聚合
    这是 Kafka 最经典的场景,没有之一。

    应用服务器 → 日志采集Agent(Flume/Filebeat) → Kafka → Elasticsearch/HDFS/ClickHouse

    公司里几百上千台机器产生日志,直接往 ES 写扛不住

    Kafka 做缓冲层,削峰填谷,下游按自己节奏消费

    一份日志同时给多个消费者:ES 做检索、HDFS 做离线分析、告警系统做实时监控
    为什么选 Kafka:​ 吞吐量极高,可以扛住所有机器的日志洪峰;消息可回溯,哪天发现丢数据了可以重新消费

    1. 用户行为追踪 / 埋点数据管道
      APP/Web前端 → 埋点SDK → 后端服务 → Kafka → 实时数仓/推荐系统/用户画像

      用户点击、浏览、停留、加购......每个行为都是一条消息

      实时推荐系统消费 Kafka 流,用户刚点了一个商品,下一秒推荐位就变

      离线数仓按小时/天批量消费,做 BI 报表、用户画像
      为什么选 Kafka:​ 数据量大(日活千万的 APP 埋点量是天文数字),需要多消费者组同时订阅同一份数据。

    2. 流处理 / 实时计算

    Kafka → Flink/Spark Streaming/Kafka Streams → Kafka/数据库/缓存

    实时风控:每笔交易经过 Flink 消费 Kafka 流,计算用户行为特征,判断是否为盗刷

    实时监控告警:服务 metrics 写入 Kafka,流计算引擎实时聚合,异常即告警

    实时 ETL:数据清洗、格式转换、 enrichment 后写回
    为什么选 Kafka:​ Kafka Streams、Flink 跟 Kafka 是原生集成的;offset 管理、exactly-once 语义都帮你做好了。

    1. 事件溯源(Event Sourcing)
      订单服务 → Kafka → 订单状态变更事件流

      订单从创建→支付→发货→完成,每一步都是一个事件写入 Kafka

      任何服务都可以回放事件流来重建订单的任意时刻状态

      审计、对账、调试都可以基于事件流来做
      为什么选 Kafka:​ 消息持久化时间长(可配置保留天数),支持按 offset 回溯,天然适合事件溯源。

    2. 系统间解耦(大数据场景)

      业务数据库 → Canal/Debezium → Kafka → 缓存/搜索/数仓

      通过 CDC(Change Data Capture)把数据库变更同步到 Kafka

      下游服务各自消费,更新自己的缓存、搜索引擎索引

      业务服务不需要关心谁需要这些数据,只管写 Kafka

相关推荐
無a伟3 小时前
RabbitMq高级特性:消息确认,持久化,重试机制
java·分布式·rabbitmq
Thomas21431 天前
kafka 存储flink changelog两种方式和形态
分布式·flink·kafka
禾吾2 天前
Kafka基础-安装、基础命令等
kafka
cpolar技术支持2 天前
Kafka Streams 窗口统计怎么验收:本地跑订单流聚合,用 cpolar 给同事看只读结果页
java·docker·kafka·cpolar·kafka streams
MZA6662 天前
Spring Boot 实战:基于自定义注解 + AOP 实现 Kafka 消息无侵入异步上送
java·spring boot·kafka
重庆小透明2 天前
Kafka 完全指南:从基础组件到核心原理(包含面试题)
java·分布式·微服务·架构·kafka
一本正经的不务正业2 天前
kafka与RocketMQ的不同
分布式·kafka·rocketmq
johnrui2 天前
kafka4.x单机版安装部署(单节点 KRaft 模式)
kafka
阿里云云原生3 天前
深入解析 RocketMQ LiteTopic:如何以百万级轻量主题实现用户级消息治理?
rocketmq