- Kafka 最适合用于从 A 到 B 的、中间没有复杂路由的流式传输,可达到最大的吞吐量。
它是事件溯源、流处理和将系统状态变更作为事件序列执行的理想选择。Kafka 也适用于处理多级流水线中的数据。
- 而RabbitMQ 往往被用来处理高吞吐量和可靠的后台作业,以及应用程序之间和应用程序内部的集成和相互通信。
各项指标对比
| RabbitMQ | Kafka | |
|---|---|---|
| 性能 | 每秒 4K-10K 条消息 | 每秒 100 万条消息 |
| 消息持久化 | 基于确认 | 基于策略(例如,30 天) |
| 数据事务性 | 事务性的 | (需要额外的业务逻辑支持) |
| 拓扑结构 | 直接、扇出、主题订阅、基于标头 | 基于发布/订阅 |
| 有效载荷大小 | 没有限制 | 默认 1MB 限制 |
另外,
数据流
RabbitMQ 使用独特的、有界的数据流。Apache Kafka 使用无界数据流,键值对不断流向分配的主题。
可扩展性和冗余
RabbitMQ 使用循环队列来重复消息。为了提高吞吐量和平衡负载,消息在队列之间分配。此外,它使众多消费者能够同时读取来自不同队列的消息。
Kafka 使用分区机制提供可扩展性和冗余。该分区在众多broker中被复制。如果其中一位broker挂了,客户端仍可由另一broker提供服务。
消息优先级
RabbitMQ 中具有优先级队列的概念,可以为消息赋予优先级。
在 Kafka 中,所有消息都具有相同的优先级,不能更改。
在 Kafka 和 RabbitMQ 之间做出决定可能会很棘手,尤其是当这两个平台每天都在改进并且优势越来越小的时候。
总的来说
Kafka 最适合需要最佳吞吐量的大数据用例,但 RabbitMQ 非常适合低延迟消息传递和复杂路由的情况。