抓住一句总纲:
RabbitMQ 更适合业务消息、低延迟、可靠投递;
Kafka 更适合高吞吐、日志采集、流式处理。
一、RabbitMQ 和 Kafka 的核心区别
1. 定位不同
RabbitMQ 更像一个传统消息队列,强调:
-
可靠投递
-
路由灵活
-
业务解耦
Kafka 更像一个分布式消息流平台,强调:
-
高吞吐
-
可扩展
-
日志流 / 大数据场景
所以你可以理解成:
RabbitMQ 偏"业务消息中间件",Kafka 偏"高吞吐消息流平台"。
2. 吞吐量不同
Kafka 吞吐量通常更高,适合大量消息快速写入和消费。
因为它底层顺序写磁盘、批量发送,天然适合高并发大数据场景。
RabbitMQ 吞吐量一般不如 Kafka,但它在业务消息场景里已经够用。
所以:
追求高吞吐选 Kafka,普通业务消息更常用 RabbitMQ
3. 可靠性和路由能力
RabbitMQ 提供的路由模型更丰富,比如:
-
直连
-
主题
-
广播
-
死信队列
-
延迟队列
而且 ACK、重试、死信这些业务特性比较完善,适合订单、支付、通知这类场景。
Kafka 也能保证可靠性,但它更偏"分区日志"的思路,路由灵活性不如 RabbitMQ 那么业务化。
4. 消息消费模型不同
RabbitMQ 更像"消息被消费后就处理掉"。
Kafka 更像"消息写入日志后保留一段时间,消费者自己记录消费位置 offset"。
所以 Kafka 的特点是:
-
消息可重复消费
-
同一份数据可以被多个消费者组独立消费
这很适合:
-
日志采集
-
埋点分析
-
实时计算
5. 使用场景不同
RabbitMQ 常见场景
-
订单处理
-
异步通知
-
延迟消息
-
解耦业务系统
-
数据分发
Kafka 常见场景
-
日志收集
-
用户行为埋点
-
大数据管道
-
实时流处理
-
高并发消息堆积场景
三、面试回答版
RabbitMQ 和 Kafka 都是常用消息中间件,但它们的侧重点不一样。
RabbitMQ 更偏传统业务消息队列,强调可靠投递、路由灵活和业务解耦,适合订单、支付、通知、延迟队列这类场景;
Kafka 更偏分布式消息流平台 ,强调高吞吐、高扩展和日志流处理,适合日志采集、埋点、实时计算和大数据场景。
从实现思路上看,RabbitMQ 更像把消息投递给消费者处理,Kafka 更像把消息顺序写入分区日志,消费者通过 offset 自己控制消费进度。所以如果是普通业务系统,我一般更倾向 RabbitMQ;如果是海量消息和实时数据处理,我更倾向 Kafka。