本文档概述了消息队列,并详细介绍了Apache RocketMQ。它涵盖了RocketMQ作为分布式消息和流平台的根本概念、架构、特性和常用使用模式。有关高可用性配置的信息,请参阅高可用性设计。
消息队列是充当中间系统的系统,它们使分布式系统的不同部分之间能够进行异步通信。它们有助于解耦系统中的组件,使整体架构更健壮、更具可扩展性。
来源:docs/high-performance/message-queue/rocketmq-questions.md16-77
有两种主要的实现消息队列的模型
队列模型:传统的生产者将消息放入队列,消费者从队列中获取消息。每条消息只由一个消费者处理。
主题模型(发布/订阅):发布者将消息发送到主题,主题的所有订阅者都会收到每条消息的副本。
RocketMQ 实现的是一种基于主题的模型,但具有独特的特性,提供了更高的灵活性。
来源:docs/high-performance/message-queue/rocketmq-questions.md162-182
RocketMQ 由四个主要组件组成
生产者:向代理发送消息。
消费者:接收和处理消息。
代理:存储和转发消息。
NameServer:充当轻量级的服务发现和路由组件。
来源:docs/high-performance/message-queue/rocketmq-questions.md222-272
RocketMQ 支持多种消息类型以适应不同的用例
普通消息:适用于通用场景的标准消息
延迟/定时消息:在未来的特定时间传递的消息
顺序消息:必须按照生产顺序消费的消息
事务消息:确保本地事务与消息发布的事务一致性
来源:docs/high-performance/message-queue/rocketmq-questions.md277-323
RocketMQ 提供多种消费模式以满足不同需求
PushConsumer:
SimpleConsumer:
消费者组和消息分发:
来源:docs/high-performance/message-queue/rocketmq-questions.md347-411 docs/high-performance/message-queue/rocketmq-questions.md200-216
在 RocketMQ 中,顺序可以保证在队列级别,但不能在整个主题级别保证。为确保相关消息的严格顺序
MessageQueueSelector 来实现,该选择器根据消息内容确定队列来源:docs/high-performance/message-queue/rocketmq-questions.md436-484
RocketMQ 使用“半消息”机制实现分布式事务
此机制可确保仅在本地事务成功时才将消息对消费者可见,从而保持分布式组件之间的一致性。
来源:docs/high-performance/message-queue/rocketmq-questions.md524-587
消息队列通常保证“至少一次”传递,这意味着可能会出现重复消息。为处理此问题,消费者必须实现幂等处理
来源:docs/high-performance/message-queue/rocketmq-questions.md509-522
RocketMQ 通过多种优化实现了高性能
mmap 和 sendfile 来减少内核和用户空间之间的数据复制来源:docs/high-performance/message-queue/rocketmq-questions.md773-777
当消息积压速度超过消费者处理速度时,RocketMQ 提供了一些策略
来源:docs/high-performance/message-queue/rocketmq-questions.md753-767
来源:docs/high-performance/message-queue/rocketmq-questions.md326-346
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 消息丢失 | 网络问题,配置不当 | 启用持久化存储,使用事务消息,实现适当的 ACK 机制 |
| 重复消息 | ACK 失败,消费者重启 | 实现幂等处理,跟踪已处理的消息 ID |
| 消费缓慢 | 资源不足,处理效率低下 | 扩容消费者,优化处理逻辑,调整批量大小 |
| 顺序问题 | 队列选择不当 | 使用 MessageQueueSelector 确保相关消息发送到同一个队列 |
| 系统崩溃 | 资源耗尽,内存泄漏 | 监控系统资源,实现熔断器,设置适当的超时值 |
来源:docs/high-performance/message-queue/rocketmq-questions.md509-522 docs/high-performance/message-queue/rocketmq-questions.md436-484 docs/high-performance/message-queue/rocketmq-questions.md753-767