当前位置: 首页 > article >正文

RocketMQ 集群架构与部署实践(一)

RocketMQ 初印象

{"type":"load_by_key","key":"auto_image_0_0","image_type":"search"}

在当今的分布式系统架构中,消息队列作为重要的中间件,承担着数据传输、系统解耦、异步处理等关键职责。RocketMQ 作为一款高性能、高可靠的分布式消息队列,由阿里巴巴开源并捐赠给 Apache 基金会,目前已成为 Apache 顶级项目,在众多互联网公司和企业级项目中得到了广泛应用 。它具有低延迟、高吞吐量、高可用性、分布式事务支持等特性,能有效应对大规模数据的实时处理和高并发场景,为分布式系统的高效运行提供了坚实保障。学习 RocketMQ 的集群架构与部署实践,不仅能帮助我们深入理解分布式系统的核心原理,还能提升解决实际工程问题的能力,掌握构建高可用、高性能分布式应用的关键技术。

RocketMQ 集群架构剖析

核心组件大揭秘

RocketMQ 的集群架构包含多个核心组件,它们相互协作,共同实现了消息队列的高效运行 。

  • NameServer:NameServer 是一个轻量级的服务发现和路由组件,它的主要作用是维护 Broker 的路由信息。在 RocketMQ 集群中,每个 Broker 启动时都会向所有的 NameServer 注册自己的地址、所属集群、所支持的 Topic 等信息 。Producer 和 Consumer 通过 NameServer 获取 Broker 的地址列表,从而进行消息的发送和消费。NameServer 本身是无状态的,这使得它可以很容易地进行集群部署,并且在集群中各个节点之间不需要进行数据同步,降低了系统的复杂性和维护成本。例如,在一个大型分布式系统中,可能存在多个 Producer 和 Consumer,它们通过 NameServer 快速找到对应的 Broker,实现了消息的高效传递。
  • Broker:Broker 是 RocketMQ 的核心组件,负责消息的存储、传输和检索。它可以按主题对消息进行分类存储,并支持顺序和非顺序消息。Broker 支持主从复制机制,通过将 Master Broker 上的消息同步到 Slave Broker,确保了数据的高可用性和可靠性。当 Master Broker 出现故障时,Slave Broker 可以接管其工作,保证消息服务的连续性。在电商系统中,订单消息、库存消息等都存储在 Broker 中,并且通过主从复制机制保证了数据的安全。
  • Producer:Producer 即消息生产者,负责将应用系统产生的消息发送到 Broker。Producer 在发送消息前,会先从 NameServer 查询目标 Topic 的路由信息,然后根据负载均衡算法选择一个或多个 Broker 进行消息发送。Producer 支持多种发送方式,如同步发送、异步发送和单向发送,以满足不同业务场景的需求。在社交平台中,用户发布的动态、评论等消息,都由 Producer 发送到 RocketMQ 集群中。
  • Consumer:Consumer 是消息消费者,负责从 Broker 订阅并消费消息。它支持拉(Pull)和推(Push)两种模式来获取消息。在集群消费模式下,同一个消费者组内的多个 Consumer 会平均分配消息队列,实现负载均衡;在广播消费模式下,每个 Consumer 都会收到相同的消息。Consumer 还支持自动消费偏移管理,确保消息的准确处理。在物流系统中,订单状态更新消息会被 Consumer 消费,以便及时更新物流信息。

集群模式全解析

RocketMQ 提供了多种集群模式,每种模式都有其独特的优缺点和适用场景 。

  • 单 Master 模式:这种模式下集群中只有一个 Master Broker,没有 Slave Broker。其优点是配置简单,易于管理和维护;缺点是存在单点故障风险,如果 Master Broker 发生故障,整个消息队列服务将不可用,适用于对可用性要求不高的测试环境或小型应用场景。例如,在一个小型的内部管理系统中,使用单 Master 模式可以快速搭建消息队列服务,满足基本的消息传递需求。
  • 多 Master 模式:集群中包含多个 Master Broker,每个 Master Broker 都可以独立接收和处理消息。优点是配置相对简单,性能较高,单个 Master Broker 宕机或重启对应用影响较小;缺点是可能会有少量消息丢失(取决于刷盘策略),并且在单台机器重启或宕机期间,该机器上未被消费的消息在恢复前不可订阅,影响消息实时性。这种模式适用于对性能要求较高,对消息丢失容忍度较低的场景,如一些实时性要求不是特别高的数据分析系统。
  • 多 Master 多 Slave 异步复制模式:每个 Master Broker 都配置一个或多个 Slave Broker,采用异步复制方式,即 Master Broker 收到消息后,先向 Producer 返回成功响应,再将消息异步复制到 Slave Broker。优点是性能高,实时性较好,主备切换对应用透明,无需人工干预;缺点是在 Master Broker 宕机或磁盘损坏时,可能会有少量消息丢失。在电商促销活动中,大量的订单消息可以通过这种模式进行高效处理,同时保证了一定的可靠性。
  • 多 Master 多 Slave 同步双写模式:Master Broker 和 Slave Broker 采用同步双写方式,即 Master Broker 收到消息后,会等待所有 Slave Broker 同步成功后才向 Producer 返回成功响应。优点是数据和服务的可用性非常高,几乎不存在消息丢失的情况;缺点是性能比异步复制模式略低,大约低 10% 左右,并且当前版本主宕机后备不能自动切换为主。这种模式适用于对数据可靠性要求极高的场景,如金融交易系统中的资金变动消息处理。

工作流程深度洞察

RocketMQ 的工作流程涉及多个组件之间的协同工作,以下是详细的流程描述 :

  1. NameServer 启动:NameServer 启动后,监听指定端口,等待其他组件的连接。它会启动定时任务,每隔一定时间扫描一次 Broker 列表,剔除长时间未发送心跳的 Broker,以保证路由信息的准确性。
  1. Broker 启动与注册:Broker 启动时,会与所有的 NameServer 建立长连接,并定时发送心跳包,心跳包中包含 Broker 的地址、所属集群、Topic 信息等。NameServer 接收到心跳包后,更新 Broker 的路由信息。
  1. Producer 发送消息:Producer 启动时,先与 NameServer 集群中的其中一个节点建立长连接,获取目标 Topic 的路由信息,包括哪些 Broker 负责处理该 Topic 的消息。然后,Producer 根据负载均衡算法选择一个 Broker,并与该 Broker 建立长连接,将消息发送到 Broker 上。Producer 可以选择同步发送、异步发送或单向发送方式。
  1. Broker 存储消息:Broker 接收到 Producer 发送的消息后,将消息存储到本地的 CommitLog 文件中,同时生成对应的 ConsumeQueue 和 Index 文件,以便快速检索和消费消息。根据配置的刷盘策略,Broker 将消息刷写到磁盘,确保数据的持久性。
  1. Consumer 消费消息:Consumer 启动时,同样与 NameServer 集群中的一个节点建立长连接,获取订阅 Topic 的路由信息。然后,Consumer 根据负载均衡算法分配到相应的 Broker,并与 Broker 建立长连接,开始消费消息。Consumer 可以选择拉取模式或推送模式获取消息,在消费过程中,会向 Broker 发送确认消息,告知 Broker 已成功消费的消息偏移量。

http://www.kler.cn/a/582546.html

相关文章:

  • Flutter_学习记录_device_info_plus 插件获取设备信息
  • Java糊涂包(Hutool)的安装教程并进行网络爬虫
  • FreeBSD下安装npm Node.js的22版本 并简单测试js服务器
  • 【Golang】第三弹----运算符
  • Python多版本环境管理UV
  • Linux上位机开发实战(qt编译之谜)
  • Spring 框架面试题集:常见问题解析
  • mysql安装与使用
  • 2024年广州市智能网联汽车创新实践年度报告
  • 文件上传漏洞 upload-labs靶场
  • upload-labs-靶场(1-19关)通关攻略
  • 一次解决Andriod Studio Build Gradle很慢或报错下载失败等问题
  • 蓝桥杯第二天:2023省赛C 1题 分糖果
  • 数字电子技术基础(二十七)——输入端电阻的负载特性
  • 微商模式的演进与开源链动2+1模式、AI智能名片及S2B2C商城小程序源码的应用探索
  • 游戏开发商 Nimblebites 携 Super-B 在 Sui 上推动游戏创新
  • 蓝桥杯备考:数据结构堆之序列合并
  • 【Pandas】pandas Series shift
  • 浅谈React的Diff算法,简单易懂!
  • 创建模式-工厂方法模式(Factory Method Pattern)