graph LR
A[Kafka] -->|分区日志| B[(顺序写入)]
A -->|日志压缩| C[历史数据保留]
D[RabbitMQ] -->|Exchange路由| E[队列]
E -->|内存/磁盘| F[消息存储]
G[RocketMQ] -->|CommitLog| H[消息存储]
H -->|ConsumeQueue| I[消费索引]
J[ActiveMQ] -->|KahaDB| K[事务日志]
J -->|LevelDB| L[快速查询]
2.2 消息传递机制
中间件
推送模型
拉取模型
消息确认机制
预取策略
Kafka
拉取
-
生产者acks机制
动态批处理
RabbitMQ
推送
-
消费者ACK/NACK
预取计数
RocketMQ
拉取
-
事务消息双重确认
智能流量控制
ActiveMQ
推送
-
事务会话确认
固定预取量
三、性能对比分析
3.1 吞吐量模型
$$ T = \sum_{i=1}^{N} C_i \times B_i $$
Kafka:单分区最大500MB/s(顺序写),水平扩展线性提升
RabbitMQ:受内存限制,单节点峰值3.3万TPS
RocketMQ:单队列百万级TPS,批量消息优化
3.2 延迟分布
场景
Kafka(P99)
RabbitMQ(P99)
RocketMQ(P99)
ActiveMQ(P99)
本地消息
0.8ms
0.3ms
1.2ms
0.6ms
跨机房消息
2.5ms
1.8ms
3.1ms
2.2ms
大事务消息
5ms
不支持
8ms
不支持
四、适用场景对比
4.1 典型场景矩阵
场景类型
推荐中间件
典型配置建议
日志采集
Kafka
分区数=消费者数×3,压缩=lz4
电商订单
RocketMQ
事务消息+顺序消费+死信队列
IoT设备通信
RabbitMQ
MQTT协议+QoS2+镜像队列
实时数仓
Kafka + Flink
端到端Exactly-Once语义
金融交易
ActiveMQ Artemis
XA事务+高可用集群
4.2 禁用场景
中间件
不适用场景
Kafka
实时性要求<10ms的场景
RabbitMQ
超大规模数据管道(>10TB/日)
RocketMQ
需要复杂路由规则(通配符/Wildcard)
ActiveMQ
云原生环境
五、运维复杂度对比
5.1 集群管理
维度
Kafka
RabbitMQ
RocketMQ
ActiveMQ
扩容方式
水平扩展(分区)
垂直扩展+镜像队列
水平扩展(Broker)
垂直扩展
故障恢复
ISR自动切换
镜像队列自动同步
DLedger协议自动选举
手动故障转移
监控指标
200+ JMX指标
50+管理插件指标
150+埋点指标
30+基础指标
备份恢复
增量日志备份
全量快照
异步刷盘+日志回放
全量备份
5.2 资源消耗对比(单节点)
指标
Kafka
RabbitMQ
RocketMQ
ActiveMQ
CPU峰值
8核
4核
6核
2核
内存需求
32GB
16GB
24GB
8GB
磁盘IO
5000 IOPS
2000 IOPS
4000 IOPS
1000 IOPS
网络带宽
10Gbps
2.5Gbps
5Gbps
1Gbps
六、选型决策树
graph TD
A[业务需求] --> B{消息量级?}
B -->|TB级/日| C{延迟要求?}
B -->|万级/日| D{需要事务?}
C -->|<10ms| E[Kafka]
C -->|>10ms| F[RabbitMQ]
D -->|是| G[RocketMQ]
D -->|否| H[ActiveMQ]
E --> I[日志/流处理]
F --> J[实时控制/物联网]
G --> K[电商/金融交易]
H --> L[企业内部系统]