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. Producer
和Consumer
可以通过任何可用的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
通过Topic
和Queue
的机制提供消息的存储。支持Pull
和Push
模式,通常有2、3个副本支持容错机制。并提供强大的峰值填充和按原始时间顺序累积数千亿条消息的能力;除此之外,broker还提供容灾恢复,丰富的指标和告警机制;
在broker集群中可以分为两种角色,Master
、Slave
。Master
节点可以接受读写请求,而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
支持
Pull
和Push
模式拉取消息。在广播模式
下,一个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部署
- 部署多个broker节点;如果是master节点就要把brokerid设为0,slave节点就得设置为非0的正整数。
- 所有的brokerName要设置乘同一个名字。
- 为了实现高可用,至少要有两个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的相关概念了解的主要内容,如果未能解决你的问题,请参考以下文章