6种消息类型
- 普通消息
- 顺序消息
- 广播消息
- 延时消息
- 批量消息
- 事务消息
2种消费模式
- 集群消费:一个Group ID内只消费一次
- 广播消费:一个Group ID内所有Consumer都消费
部署架构
- Name Server + broker(主/备) + producer + consumer
- 【broker】与所有Name Server建立长连接
- 【producer】与某个Name Server建立连接,查询topic所在broker,并与broker master建立连接
- 【consumer】与某个Name Server建立连接,查询topic所在broker,与broker master 和broker slave 分别建立连接。broker master会根据情况建议consumer从哪里拉消息
broker原理
消息存储
- 一个broker一个commitLog(用于顺序写),broker上的多个topic共用一个commitLog。
- 基于commitLog ,会根据topic情况分别生成consumer queue,并建立indexFile,用于快速读取
高性能原理
核心设计 - 1:(写优化)commitlog的顺序写PageCache
【页缓存 PageCache】
PageCache是操作系统对文件的缓存,在PageCache上的顺序写操作速度接近于内存读写速度
核心设计 - 2:(读优化)commitlog的随机读优化
- 【PageCache的预读取】:从物理磁盘访问目标页时,会顺序对其相邻块的数据进行预读取。然后,在PageCache中的读取速度又接近于内存速度
- 【直接内存MMap】:减少了内核态和用户态的内存拷贝次数
- 【SSD硬盘】
核心设计 - 3:异步刷盘【默认】
- 【同步刷盘】真正到磁盘才回复ACK给producer。例如严格的金融业务使用。
- 【异步刷盘】消息刷到PageCache就回复ACK。提高性能和吞吐量
RPC
RocketMQ的RPC通信采用Netty作为底层通信库,同样也遵循Reactor多线程模型。
oneway模式(极限高吞吐)
此模式下,MQ Producer只发送请求不等待应答,耗时通常在微秒级完成。例如一般的日志收集场景。
怎么提升消息消费能力
1、创建topic时放大queue大小,进而能提升consumer个数上限。(适用MQ队列水位高的情况)
2、增加新topic,目的也是增加queue,然后增加consumer。(适用消息量大,MQ队列水位较低的情况)