概述
apache RocketMQ是一个分布式的消息,他是一个低延迟、高性能、高可靠性、万亿容量、灵活可扩展的流媒体平台,他包括四个部分:name servers,brokers,producers,consumers,他们中的每一个都可以水平扩展,这样就避免了单点故障。
NameServer集群
name servers提供一个轻量级服务发现和路由选择,每个name server记录所有的路由信息,提供相应的读写服务,支持快速存储扩展。
Broker集群
broker通过TOPIC和QUEUE机制来对消息进行存储,他们支持推拉模式,包含容错机制,提供强大的峰值填充和按原始时间顺序积累数以千亿计的消息的能力。另外brokers提供灾难恢复,丰富的指标统计,预警机制,以上这些功能都是传统消息系统所没有的。
Producer集群
producers支持分布式部署,分布式producer通过多种负载均衡模式发送消息到broker集群,发送进程支持快速失败和低延迟。
Consumer集群
consumer支持分布式部署,他们支持推拉模式,他还支持集群消费和消息广播,他提供实时消息订阅机制,能满足大部分消费者需求。
NameServer
NameServer是一个功能齐全的服务,主要包含以下2个功能:
1、broker管理,NameServer接受broker的注册,通过心跳机制检查每个broker是否存活。
2、路由选择管理,每个NamerServer将保留所有broker的路由信息和客户端查询的queue信息。
我们都知道,RocketMQ客户端(producer/consumer)将通过nameserver查询queue路由信息,但是客户端是怎么发现NameServer地址的?
这里有四种方式来获取地址:
1、编程方式,使用producer.setNamesrvAddr("ip:port")
2、java选项,使用rocketmq.namesrv.addr
3、环境变量,使用NAMESRV_ADDR
4、HTTP端点
Broker服务
broker服务提供可高的消息存储和传递、消息查询、保证HA,通过下面图片可以看到broker服务有以下几个重要的子模块:
1、Remoting Module,borker的入口,处理客户端的所有请求;
2、Client Manager,管理客户端(producer/consumer)并维护consumer的主题订阅;
3、Store Service,提供简单的API在物理磁盘上存储或者查询消息;
4、HA Service,主broker(负责读写)和从broker(负责读)之间同步数据;
5、Index Service,根据指定的key来对消息创建索引,提供快速消息查询;
broker配置
Property Name | Default value | Details |
---|---|---|
listenPort | 10911 | 客户端监听端口 |
namesrvAddr | null | 地址 |
brokerIP1 | ip地址 | 多个地址 |
brokerName | null | broker名称 |
brokerClusterName | DefaultCluster | broker属于哪个集群 |
brokerId | 0 | 为0表示master, 大于0表slave |
storePathCommitLog | $HOME/store/commitlog/ | commit log的路径 |
storePathConsumerQueue | $HOME/store/consumequeue/ | consume queue的路径 |
mapedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | 提交日志的映射文件大小 |
deleteWhen | 04 | 何时删除超出保留时间的提交日志 |
fileReserverdTime | 72 | 删除提交日志之前保留它的小时数 |
brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLAV |
flushDiskType | ASYNC_FLUSH | SYNC_FLUSH:在确认生产者之前将每个消息刷新到磁盘;ASYNC_FLUSH :利用了组提交,从而获得了更好的性能; |
注意:本文归作者所有,未经作者允许,不得转载