RocketMQ(二)角色与功能

原创
2021/05/30 14:59
阅读数 85

RocketMQ角色: 每一部分都可以水平扩展以避免单点故障

  •     Producer: 消息生产者
  •     Consumer: 消息消费者
  •     Broker: 消息存储中心,主要作用是接收来自 Producer 的消息并存储, Consumer 从这里取得消息。Broker上存储着多个topic的消息。
  •     Name Server: 保存 Broker 相关 Topic 等元信息并给 Producer ,提供 Consumer 查找 Broker 信息。(类似于注册中心)

  •     Topic: 区分不同的消息的类别;一个topic可以多个Producer生产,也可以多个Consumer消费。
  •     Message Queue: Message是在每个Broker上以Queue的形式记录。同一个topic有多个队列存储消息,消息在队列里有序,不同队列的数据相对无序。
  •     Tag:消息标签,用来进一步区分某个 Topic 下的消息分类,消息队列 RocketMQ 允许消费者按照 Tag 对消息进行过滤,确保消费者最终只消费到他关注的消息类型。

各部分功能介绍:

Producer :

  • 通过与NameServer中的某一节点(随机选择)建立长连接,定期从NameServer获取Topic的信息,并与提供信息的Topic的主节点建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。
  • 单个生产者和一台NameServer保持长连接,如果该NameServer挂掉,生产者会自动连接下一个NameServer,直到有可用连接为止,并能自动重连。
  • 消息丢失&未知状态处理。启用重试机制,retryTimesWhenSendFailed/retryTimesWhenSendAsyncFailed默认为2次,加上正常1次,共3次;启用客户端容错,sendLatencyFaultEnable客户端维护一个broker-发送延迟关系,剔除宕机、不可用、延迟级别高的broker,最大限度利用broker的能力。
  • 单个生产者和该生产者关联的所有broker保持长连接,与Master定时发送心跳。
  • 向Broker集群发送消息时,会使用多种的负载均衡机制,以支持fast failure和低延迟。

Consumer :

  • 通过与NameServer中的某一节点(随机选择)建立长连接,定期从NameServer获取Topic的信息。
  • 如果该NameServer挂掉,消费者会自动连接下一个NameServer,直到有可用连接为止,并能自动重连。
  • 单个消费者和该消费者关联的所有broker保持长连接。
  • 向Broker发送心跳信息,心跳信息中包含了当前消费者的订阅信息。

NameServer :

  • 几乎无状态,多个节点之间无需同步。
  • 有一台宕机,与其他NameServer之间的数据就可能存在不一致了,所以NameServer集群只符合AP原则,不符合C原则。
  • Broker加入时向每一个NameServer都发送注册信息,每个Broker定时发送topic信息。

Broker :

  • 区分主从,一主对应多从,一从对应一主。主节点既可消费数据,也可生产数据,从节点只能让Consumer消费数据。
  • 主从节点通过指定相同的BrokerName,不同的BrokerID,BrokerID为0就是主节点,非0就是从节点。
  • 与所有的NameServer保持长连接,定时向NameServer发送心跳与topic信息。
  • 当Broker挂掉,NameServer会根据心跳超时主动关闭连接,一旦连接断开,会更新Topic与队列的对应关系,但不会通知生产者和消费者。
  • 一个Topic分布在多个Broker上,一个Broker可以配置多个Topic,它们是多对多的关系。
  • 如果某个Topic消息量很大,应该给它多配置几个Queue,并且尽量多分布在不同Broker上,减轻某个Broker的压力。
  • Salve定时从Master同步数据,如果Master宕机,则Slave提供消费服务,但是不能写入消息,此过程对应用透明,由RocketMQ内部解决(结合同步/异步赋值,实现broker端保证)

 

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部