RocketMQ学习- 1. RocketMQ的相关概念了解

Posted kevinstark

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RocketMQ学习- 1. RocketMQ的相关概念了解相关的知识,希望对你有一定的参考价值。

RocketMQ 架构

架构图

技术图片

概述

RocketMQ 是一个分布式的低延迟高性能可靠性高的消息系统,

组成

NameServer

提供轻量的服务发现和路由的功能。每个NameServer记录了所有的路由信息,提供相应的读写服务和快速扩展的功能。

NameServer 遵循的是share-nothing design。也就是说NameServer之间不共享任何信息。Brokers给所有的NameServer发送心跳数据。Producers and consumers can query meta data from any of name servers available while sending / consuming messages. ProducerConsumer可以通过任何可用的NameServer在发送、接收消息的时候得到borker的元数据信息,

NameServer 作用
  • 管理Broker:NameServer接受Broker Cluster的注册,并且提供心跳检测机制来判断Broker是否存活。
  • 管理路由:每个NameServer为客户端的queue(队列)查询(producer/consumer)维持着broker集群的所有路由信息,使客户端能快速定位到相应的broker。
客户端连接NameServer的方式
  • 编程式,producer.setNamesrvAddr("ip:port")
  • 设置Java变量:rocketmq.namesrv.addr
  • 系统环境变量:NAMESRV_ADDR

Broker Cluster

Broker通过TopicQueue的机制提供消息的存储。支持PullPush模式,通常有2、3个副本支持容错机制。并提供强大的峰值填充和按原始时间顺序累积数千亿条消息的能力;除此之外,broker还提供容灾恢复,丰富的指标和告警机制;

在broker集群中可以分为两种角色,MasterSlaveMaster节点可以接受读写请求,而Slave节点只能接收读请求

Broker的作用

Broker有的消息存储消息投送消息查询保证高可用等作用。

结构

技术图片

  • Remoting Module:broker的入口,用来处理客户端的请求;
  • CLient Manager:管理客户端信息(Producer/Consumer)。并且为Consumer维护它所订阅的topic;
  • Store Service:提供API为客户端查询以存储在硬盘上的消息;
  • HA Service:为broker集群中的master和slave彤数据同步的功能;
  • Index Service: 为那些指定key的消息快速建立索引,并能为客户端快速查询消息

    Producer Cluster

    Consumer Cluster

    支持PullPush模式拉取消息。在广播模式下,一个consumerGroup中的所有消费者都能收到消息,默认情况下,一个consumerGroup只能有一个consumer消费这条消息

Topic

broker与consumer、producer联系的中间载体。

Queue

Topic与Queue的对应关系使1对多的关系,一个Topic可以包含多个Queue,主要是做负载均衡。当发送消息时,Producer只需要指定Topic,他就会根据topic的路由信息来来选择具体发送到哪个Queue上。 同样的,当消费者订阅消息的时候,也会根据负载均衡算法来决定订阅topic上的哪些Queue的消息。

Offset

rocketmq在存储消息的时候会为每个topic下的每个queue生成一个消息的索引文件,每个queue都对应这样一个offset来记录当前Queue消息总数。

部署篇

NameServer

为了使集群能在有节点宕机的时候仍然能够正常工作,推荐部署两个或者更多的NameServer,只要有一台NameServer实例正常,整个集群都能正常提供服务。

broker部署

  1. 部署多个broker节点;如果是master节点就要把brokerid设为0,slave节点就得设置为非0的正整数。
  2. 所有的brokerName要设置乘同一个名字。
  3. 为了实现高可用,至少要有两个broker。每个topic至少要分布在两个或者更多的broker上。

配置

属性名 默认值 描述
listenPort 10911 broker启动端口
namesrvAddr null nameServer 地址
brokerIP1 当有多个地址的时候,需要配置
brokerName broke名称
brokerClusterName broker集群名称
brokerId 0 0:主; > 0 从
storePathCommitLog ~/store/commitlog/ 提交日志存储路径
storePathConsumerQueue ~/store/consumequeue/ 消费队列存储路径
mapedFileSizeCommitLog 1024 * 1024 * 1024(1G) mapped file size for commit log
deleteWhen 04(凌晨4点) 超过保留时间的commit log的删除时间
fileReserverdTime 72 commitlog的存活时间(小时)
brokerRole ASYNC_MASTER broker角色(SYNC_MASTER/ASYNC_MASTER/SLAVE)
flushDiskType ASYNC_FLUSH {SYNC_FLUSH/ASYNC_FLUSH}. Broker of SYNC_FLUSH mode flushes each message onto disk before acknowledging producer. Broker of ASYNC_FLUSH mode, on the other hand, takes advantage of group-committing, achieving better performance.

通用配置

brokerClusterName = bm-test-rocketmq-broker-cluster
# 108的从节点,集群中主从的对应关系是通过brokerName做映射的
brokerName = bm-test-rocketmq-broker-108
brokerId = 1
deleteWhen = 04
fileReservedTime = 72
brokerRole = SLAVE
flushDiskType = ASYNC_FLUSH
listenPort=11912
# 当一台机器部署多个节点的时候,这些存储路径需要区分开来,否则启动报错
storePathCommitLog=/data/rocketmq/slave/strore/commitlog
storePathConsumerQueue=/data/rocketmq/slave/store/consumequeue
# 是否自动创建topic
autoCreateTopicEnable=true
# 在多网卡的时候需要配置
brokerIP1=192.168.242.107
# 告诉salve节点从哪台机器上同步信息
brokerIP2=192.168.242.107
namesrvAddr=192.168.240.64:9876;192.168.240.64:9877
storePathRootDir=/data/rocketmq/slave/strore/rootdir

以上是关于RocketMQ学习- 1. RocketMQ的相关概念了解的主要内容,如果未能解决你的问题,请参考以下文章

RocketMQ源码学习笔记

RocketMQ源码学习笔记

RocketMQ源码学习笔记

RocketMQ源码学习- 1. 入门

RocketMQ入门到精通— RocketMQ学习入门指南 | 精讲RocketMQ是什么

RocketMq 学习记录