走近RocketMQ:(一)RcoketMQ的基础概念

一、前言

RocketMQ是阿里巴巴开源的分布式消息中间件,现已捐献给Apache基金会。目前企业中常用的消息队列就是Kafka和rockerMQ,大多数场景下Kafka和RocketMQ都是可以使用,比如解耦、削峰等。两者也各自有擅长的地方,比如kafka擅长大数据量的流式处理上;而RocketMQ在消息查询、事务消息、严格顺序消息、定时消息等方面有更好的支持。
本系列文章主要集中解析RocketMQ消息发送、消费、存储、消息延迟等相关源码和原理。

二、基础概念

在详细解析RocketMQ的原理之前,首先对RocketMQ的一些基础概念进行了解,方便后续内容的学习。
下图展示了RocketMQ的系统架构图,主要包括四部分:生产者(Producer)、消费者(Consumer)、集群(Broker)、路由注册中心(NameServer)
RocketMQ系统架构图

  • 生产者(Producer):负责消息发送,提供同步发送、异步发送和单向发送三种方式
    • 在发送时需要指定主题 (Topic) 和Topic所属的队列(MessageQueue)【队列可以不在程序指定,由RocketMQ SDK自身策略决定队列】,发送数据以消息(Message)的方式发送到集群(Broker)
  • 消费者(Consumer):负责消息消费,提供了两种消费形式:拉模式消费和推模式消费,推模式消费实际上是“封装”的拉模式
    • 所谓的拉模式,即从集群拉取所订阅Topic中的消息。
  • 集群(Broker):核心提供消息存储以及为Producer和Consumer客户端提供读写服务,采用多主多从的集群架构保证高可用
    • Broker的Master节点可提供读写服务,Slave节点只提供读服务,当一个Master节点不可用时, Consumer 会被自动切换到从Slave读,不影响Consumer程序运行
    • 当创建Topic时,会在一组Broker(Broker组:相同 Broker名称,不同brokerId的机器组成)中所有的Master节点都创建多个Message Queue,当一个Master节点不可用时,Producer可以发消息到其他Master节点
  • 路由注册中心(NameServer):为Producer和Consumer客户端根据 Topic 提供路由服务,从而引导客户端向 Broker 发送消息。NameServer 之间的节点不通信,其数据一致性采取的是最终一致性
    • Broker节点在启动时,轮询NameServer集群,与每个NameServer节点建立长连接,发起注册请求
    • Broker节点注册成功后,每隔30s定期向NameServer上报Topic路由信息,NameServer收到心跳包后记录Broker的最新时间戳
    • Broker节点正常下线时,会与NameServer断开长连接,Netty的通道关闭,监听器会监听到连接断开事件,然后将这个Broker剔除掉
    • NameServer中有一个定时任务,每隔10s扫描Broker列表,如果Broker的最新时间戳距离当前时间超过120s,会判定Broker失效并将其剔除掉
  • 主题(Topic):用来消息传输和存储的顶层容器,一般一个topic对应一类业务场景
  • 队列(MessageQueue):消息存储和传输的实际容器,一个Topic是由多个队列组成
  • 消息(Message):数据的传输单元

以上即为RocketMQ相关核心概念的介绍。下面会介绍RocketMQ的Producer发送消息的相关流程和源码。 - 走近RocketMQ:(二)RcoketMQ Producer消息发送

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>