开源消息中间件RocketMQ详解
开源消息中间件RocketMQ
消息队列
RocketMQ
是阿里巴巴集团自主研发的专业消息中间件,基于高可用分布式集群技术,提供消息订阅和发布、消息轨迹查询以及定时(延时)消息等一系列消息服务,是企业级互联网架构的核心产品,为分布式应用系统提供异步解耦、削峰填谷的能力,同时具备海量消息堆积、高吞吐、可靠重试等互联网应用所需的特性,阿里巴巴将RocketMQ内核贡献给Apache基金会,已成为Apache孵化的*项目。
产品功能
特色功能
- 集群消费:一个 Group ID 所标识的所有 Consumer 平均分摊消费消息。
- 广播消费:允许同一个 Group ID 所标识的所有 Consumer 都各自消费某条消息一次。
- 顺序消息:允许消息消费者按照消息发送的顺序对消息进行消费。
- 事务消息:实现类似 X/Open XA 的分布事务功能,以达到事务最终一致性状态。(
注意版本差异,最新版本支持事务消息,老版本不支持
) - 定时(延时)消息:允许消息生产者指定消息进行定时(延时)投递,最长支持 40 天。
- 消息轨迹:通过消息轨迹,能清晰定位消息从发布者发出,经由消息队列 RocketMQ 服务端,投递给消息订阅者的完整链路,方便定位排查问题。(
注意版本差异,最新版本支持消息链路,老版本不支持
) - 重置消费进度:根据时间重置消费进度,允许用户进行消息回溯或者丢弃堆积消息。
- 死信队列:将无法正常消费的消息储存到特殊的死信队列供后续处理。
- 大消息:支持最大 4 MB 消息。
管理工具
- 开源Web 控制台(RocketMQ Console):支持 Topic 管理、生产者管理、消费者管理、消息查询、消息轨迹展示和查询。
- OpenAPI:提供 API 便于将消息队列 RocketMQ 管理工具集成到自己的控制台。
- mqadmin 命令集:提供一套丰富的管理命令集,以命令方式对消息队列 RocketMQ 服务进行管理。
应用场景
- 系统间异步解耦
- 分布式事务(事务消息)
- IM实时通信(例如钉钉)
- 实时计算分析(数据收集)
- 流量削峰(大促期间减少服务器压力)
- 大规模机器缓存同步(利用广播消费机制)
- 日志服务
高级特性
三种发送方式
- 可靠同步发送:消息生产者向消息服务器发送消息,必须要等待接收到服务器响应结果,才能发送下一条消息(适用于大多数应用场景,例如重要邮件/短信通知、新用户注册送优惠券、支付成功送红包等等)
- 可靠异步发送:消息生产者向消息服务器发送消息,不用等待服务器响应直接发送下一条消息,通过回调接口来接收和处理服务器响应结果。(性能上比可靠同步消息高,使用于对调用执行顺序没有要求的场景)
- 单向发送(oneway):消息生产者只发送消息到消息服务器,服务器无响应,也不会触发回调。(适用于对消息可靠性要求不高的场景,例如日志收集等)
发送方式 | 发送TPS | 发送结果反馈 | 可靠性 |
---|---|---|---|
同步发送 | 快 | 有 | 不丢失 |
异步发送 | 快 | 有 | 不丢失 |
单项发送 | 最快 | 无 | 可能丢失 |
消息类型
定时/延时消息
- 定时消息:在当前时刻后的某一个特定时间投递消息。
- 延时消息:当前时刻延迟一定时间后投递消息。
消费者存在消息堆积时,定时/延时消息将不能严格按照配置的时间进行消费。
事务消息
顺序消息(全局/分区顺序)
消息重试
消息过滤
广播消费和集群消费
消息轨迹
设计原理
MQ架构
- Broker:消息服务端实例,用来存放消息,通过master、slaver一主一备模式来保证消息可靠,不会丢失。
- NameServer:名称服务器,存储集群中每个Broker实例的元数据信息(Broker会定期更新存放在NameServer集群中每个名称服务器上的元数据),主要通过名称服务器来管理主题路由信息。
消息队列存储方式及存储模型
刷盘策略
堆积策略
高可用方案
开源消息中间件对比
控制台RocketMQ Console使用
最佳实践
开发常见问题
持续更新中…