RocketMQ之二 概念

Producter

  • 生产消息

Consumer

  • 消费消息

Broker

  • 作用
    • 暂存、传输的邮局
    • Broker 是RocketMQ 的核心,大部分‘重量级”工作都是由Broker 完成的,包括接收Producer 发过来的消息、处理Consumer 的消费消息请求、-消息的持久化存储、消息的HA机制以及服务端过滤功能等
  • 连接
    • 单个broker和所有nameserver保持长连接
  • 心跳
    • 心跳间隔:每隔30秒(此时间无法更改)向所有nameserver发送心跳,心跳包含了自身的topic配置信息
    • 心跳超时:nameserver每隔10秒钟(此时间无法更改),扫描所有还存活的broker连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则断开连接。
  • 断开
    • 时机:broker挂掉;心跳超时导致nameserver主动关闭连接

动作:一旦连接断开,nameserver会立即感知,更新topc与队列的对应关系,但不会通知生产者和消费者

  • 有主从之分,一主一从或一主多从

NameServer

  • 协调各个地方邮局的管理机构
  • 让producter和consumer通过NS发现Broker
  • NameServer 是整个消息队列中 的状态服务器,集群的各个组件通过它来了解全局的信息 。 同时,各个角色的机器都要定期 向 NameServer 上报自己的状态,超时不上报的话, NameServer 会认为某个机器出故障不可用了,其他的组件会把这个机器从可用列表里移除 
  • NamServer 可以部署多个,相互之间独立,其他角色同时向多个 NameServer机器上报状态信息,从而达到热备份的目的
  • NameServer 本身是无状态的,也就是说 NameServer 中的 Broker 、 Topic 等状态信息不会持久存储,都是由各个角色定时上报并存储到内存中的(NameServer 支持配置参数的持久化, 一般用不到) 

Topic

  • 区分不同类型、不同业务的消息
  • 订阅消息的最小单位

Tag

  • 子主题,为用户提供了额外的灵活性。有了标签,来自同一业务模块的具有不同目的的消息可以具有相同的主题和不同的标记。标签有助于保持代码的清晰和连贯,同时标签也方便RocketMQ提供的查询功能。
  • 例如:consumer.subscribe(“TopicTest”, “*”);
    • *表示处理所有tag,这实现了消费端的消息过滤

GroupName

  • 代表具有相同角色的生产者组合或消费者组合,称为生产者组或消费者组
  • 作用是在集群HA的情况下,一个生产者down之后,本地事务回滚后,可以继续联系该组下的另外一个生产者实例,不至于导致业务走不下去。在消费者组中,可以实现消息消费的负载均衡和消息容错目标。

另外,有了GroupName,在集群下,动态扩展容量很方便。只需要在新加的机器中,配置相同的GroupName。启动后,就立即能加入到所在的群组中,参与消息生产或消费。

在Producer中使用GroupName

MessageQueue

  • 解决Topic数据量大,高并发问题
  • 设置一个或多个messageQueue,实现并行的向多个messageQueue发送和消费
  • 分区作用

Offset

  • 是指某个 Topic 下的一条消息在某个 Message Queue 里的位置,通过 Offset 的值可以定位到这条消息,或者指示 Consumer 从这条消息 开始向后继续处理 

官方参考:

https://github.com/apache/rocketmq/blob/master/docs/cn/concept.md