RocketMQ笔记
1. RocketMQ介绍
1.1. RocketMq功能特性
1、支持事物型消息
2、支持延时消息
3、支持消息重发
4、支持consumer端tag过滤
5、支持消息回放
1.2. 各种MQ对比
- 队列选型维度对比
1、系统定位
2、支持功能
3、可用性
4、可靠性
5、运维
1、基础对比
2、可靠性、可用性对比
3、功能对比
- 分析
1)Kafka:系统间的数据流通道(适合做大数据量对可靠性消息要求不是很严格)
2)RocketMq:高性能可靠消息传输
3)RabbitMq:可靠消息传输
1.3. RocketMq架构
1、Broker主从部署,自身信息注册在NameServer中
2、Client从NameServer中获取Broker信息
3、NameServer节点相互独立,无数据交互
2. 特性分析
2.1. 可靠性分析
1)同步刷盘:性能低,可靠性高
2)异步刷盘:性能高,可靠性低
1)异步复制:多Master、多Slave模式-异步复制
2)同步双写:多Master、多Slave模式-同步双写
2.2. 高可用分析
-
主从模式master宕机
-
集群搭建方式
- 单master
- 多maser
- 多master多slave-异步复制
- 多master多slave-同步双写
2.3. 数据存储
1、CommitLog:存储消息主体
2、ConsumerQueue:消息消费队列
3、IndexFile:消息索引文件
- 优化
1)CommitLog文件切分,默认1G
2)MMap提升文件访问性能
3)SSD
2.4. 生产方式
1)同步(sync)
2) 异步(async)
3) 单向(oneway)
2.5. 消费消息
1)PUSH :消息队列主动地将消息推送给消费者
消息实时性高,但没有考虑客户端的消费能力
2)PULL:由消费者客户端主动向消息队列去拉消息
消息实时性低,可能造成大量无效请求
3) RocketMq采用拉去模式 【LongPoll()使用一种长轮询机制】,来平衡上面push/pull模型的各自缺点
Consumer发送拉去消息
Broker hold住请求,直到有新消息再返回
请求超时,Consumer再次发起请求
请求超时时间默认30m
- 消费方式
集群消费:集群内部竞争消费,但条消息只消费一次,各节点均匀消费Topic的消息
广播消息:各集群消费全量的消息,单条消息在每个集群都会被消费一次
2.6. 负载均衡
1、Producer 端负载均衡
1)定时获取Queue信息
2)负载均衡算法:随机递增取模
3)容错机制:故障延迟
2)Consumer端负载均衡
1)客户端心跳上报数据
2)定时Rebalance20s
获取队列信息、获取消费者信息、排序平均分配
客户端负载均衡
1)获取队列信息
2)获取消费者信息
3)排序平均分配
4)与上次结果比对
2.7. 半消息
1、半消息主题
1)HALF 消息:RMQ_SYS_TRANS_HALF_TOPIC(临时存放消息信息)
a: 事务消息替换主题,保存原主题和队列信息
b:半消息对Consumer不可见,不会被投递
2)OP 消息:RMQ_SYS_TRANS_OP_HALF_TOPIC(记录二阶段操作)
a:Rollback:只做记录
b:Commit:根据备份信息重新构造消息并投递
3)回查
a:对比HALF消息和OP消息进行回查