RabbitMQ & Kafka
Contents
RabbitMQ
RabbitMQ 是什么
- 一个通用的消息代理中间件。
- 基于消息队列。
- 被设计为灵活的路由代理以及被动消费者模型。
为什么使用 RabbitMQ
RabbitMQ
已经发展了很多年,成熟稳定。- 多客户端,插件支持,易于使用。
- 完善的
web
管理与监控。 - 消息路由策略非常灵活,可以应对复杂的业务场景。
- 一致性,高可用,低延迟,高吞吐等可以灵活配置。
- 通过
feature flags
实现集群滚动升级。 - 严格的顺序性保证。
Kafka
Kafka 是什么
- 具有消息语义的分布式提交日志系统。
- 分布式流处理平台
为什么使用 Kafka
- 极高的吞吐与扩展。
- 事件重放功能。
- 流处理平台标准。
- 单
topic
可以有n
个consumer group
消费。 - 单分区顺序性保证。
Kafka connector
生态。- 消息格式变更向后兼容。
什么时候使用 RabbitMQ 而不是 Kafka
如果不是必须需要 Kafka
的某个特性,那么 RabbitMQ
可以提供灵活的路由,满足高吞吐和实时处理需求,同时运维会比 Kafka
简单很多。
- 涉及到不同应用的需求可以灵活选择。
- 需要彻底解耦生产者和消费者。
- 每个消费者所涉及的绑定到
exchange
队列都互相独立。 - 消费者不需要处理不相关的消息。
什么时候使用 Kafka 而不是 RabbitMQ
-
需要流处理的场景。
-
需要极高的吞吐。
-
需要聚合多个数据源来汇集数据。
-
极高的扩展(
RabbitMQ
最多 5 个broker
)。 -
事件重放。
-
消息格式变更。
RabbitMQ 缺点
- 在网络分区的情况下运维复杂度比较高。
- 一个队列一个线程,如果队列过多线程切换代价高,影响消息处理效率。
broker
扩展到 3 个以上会降低性能。- 没有事件重放功能。
- 不支持流处理。
Kafka 缺点
-
运维复杂度高。需要额外的
zookeeper
集群。 -
需要仔细设计分区数。
-
存储管理复杂。
-
不同的团队需要协调生产者和消费者组,无法实现生产者消费者完全解耦。
图片来源:https://jack-vanlightly.com/sketches。
-
没有完善的
web
管理,监控。
总结
暂时大概的梳理了一下 RabbitMQ
和 Kafka
的优缺点和使用场景,后面看看再梳理一下它们各自实现的一些细节。