Rocketmq源码学习1——Rocketmq基础

发布时间 2024-01-02 14:30:39作者: Cuzzz

1.什么是Rocketmq

RocketMQ是一款开源的分布式消息中间件,由阿里巴巴团队最初开发,并于2016年贡献给Apache软件基金会,后成为Apache顶级项目。RocketMQ设计用于处理高并发、高吞吐量的场景,支持丰富的消息交互模式。

以下是RocketMQ的一些关键特性:

  • 分布式架构:RocketMQ采用分布式集群架构,包含多个Broker服务器和NameServer。NameServer用于维护Broker节点和Topic路由信息,而Broker负责储存和转发消息。
  • 消息可靠性和高性能:RocketMQ提供高可靠性的消息传输保证,如消息持久化、消费者消息确认机制和容错机制。同时,它也注重高吞吐量的性能优化。
  • 多种消息模型支持:RocketMQ支持多种消息传递模式,包括同步发送、异步发送和单向发送,也支持广播和集群消费模式。
  • 顺序消息和延迟消息:RocketMQ支持严格的消息顺序和可配置的延迟消息传递。
  • 事务消息:RocketMQ支持事务性消息,允许在分布式系统中进行事务操作而不丢失消息。
  • 多语言客户端:提供多种语言的客户端,如Java、C++、Go等,方便不同开发环境中的集成。
  • 高度可扩展:RocketMQ通过水平扩展Broker和NameServer节点来支持更大规模的系统。
  • 多租户和多命名空间:RocketMQ支持多租户操作,每个租户可以有独立的命名空间,方便资源隔离和管理。
  • 监控和运维工具:提供了丰富的监控和运维工具,帮助管理和监控集群状态。

RocketMQ适用于大规模的分布式系统,广泛运用于实时消息处理、日志聚合、流数据处理、事务性消息传递等场景。由于其高性能和可靠性,它常被用于电商、金融、物联网、大数据等行业。

2.rocketmq部署架构与领域模型

2.1 架构

image

  • NameServer:独立的命名服务,用于管理Broker服务器,是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
  • Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName和不同的BrokerId来定义,BrokerId为0 表示Master,非0表示Slave。Master也可以部署多个。每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server。
  • Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server获取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。
  • Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server获取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。

在rocketmq的架构中,【无状态】是非常巧妙的点,无状态具备诸多优点:

  • 可伸缩性:无状态节点可以轻松地进行水平扩展(Scale Out),因为没有状态信息需要同步。新的节点可以随时添加到系统中,而不需担心现有状态的迁移问题。
  • 负载均衡:由于每个节点之间是相互独立的,负载均衡器可以简单地将请求分配给任何一个节点,无需考虑节点间的状态同步,这样可以更有效地分散负载。
  • 容错性:在无状态架构中,若某个节点失败,其他节点可以无缝接管处理请求,因为所有节点都是等效的,没有持久状态的依赖。这简化了故障恢复流程。
  • 简化设计:无状态设计通常更加简单,因为开发者无需管理和同步跨多个节点的状态,降低了处理分布式数据一致性的复杂性。
  • 部署灵活性:无状态服务可以在任何时间被部署在任何机器上,不需要考虑状态信息的迁移和同步问题,使得自动化部署更为简单