日常工作中使用过RabbitMQ、RocketMQ、Kafka这几个常用的MQ,为了备忘,将RocketMQ相关资料上传这里。
关键概念:
Producer(生产者)
Consumer(消费者)
Producer Group(生产者组)
维护生产组
当某台producer宕机时,broker会向同组其他producer确认事务情况
Consumer Group(消费者组)
负责将consumer分组
根据此会制定消费方式
Broker
消费方式
广播消费(类似于 JMS pub/sub): 所有的consumergoup的所有consumer都会消费到同一条消息
集群消费(同consumergroup内类似于 JMS point-to-point):每个consumergroup都会有一个consumer消费到消息
NameSrv(域名服务)
管理多broker常用
维护broker路由
Topic(主题)
正常TOPIC:需要提前创建
重试队列 RETRY TOPIC:创建ConsumerGroup时自动创建
死信队列 DLQ(Dead Letter Queue) TOPIC:创建ConsumerGroup时自动创建
MessageQueue(消息队列)
可理解为一个不限长的Array,会定期移除过期(超时)的消息数据
topic下存储消息的offset单位(逻辑队列),也是发送的路径
设定topic的时候可以指定 写队列数与读队列数
通过offset概念来维护,offset是long型,理论百年不会溢出
了解kafka的可以按partition理解
Message(消息)
消息,使用MQ发送的消息内容,每次只会向一个Queue发送消息
MsgID,RocketMQ服务器生成
MsgKey,生产者生成
Tag,标签。在消息上的信息,用于隔离消息:隔离可以由消费者过滤,隔离也可以由RocketMQ服务过滤
顺序消息
可以通过业务hash ,将同hash的消息放入同队列,然后使用有序listener去消费
特性策略及方法
Message Priority(优先级)
RocketMQ不支持消息优先级
可以通过指定Broker/Queue的方式来做优先级隔离
Message Filter(过滤)
Broker过滤,通过配置subExpression
Consumer过滤,通过消费代码解析Tag过滤
Message Persistence(持久化)
持久化到MYSQL:Buffer扩展
KV存储系统,Buffer扩展
文件,Buffer扩展
内存镜像,镜像恢复
消息本身存储在内存buffer内
异步刷盘,JVM->PAGECACHE->刷盘
mmap+write(0拷贝),MappedByteBuffer(nio文件读写模型,直接映射到缓冲区pagecache),文件映射到内存上,减少了直接调用os的系统命令,进行从内核空间和用户空间的拷贝操作
Message Reliablity(消息可靠)
RocketMQ消息基本不丢。因此称其可靠。
不丢或少丢的情况:Broker正常关闭,Broker Crash,OS Crash,供电闪断等
非双写模式全丢的情况:无法开机,磁盘损坏等
Low Latency Messaging(低延迟)
RocketMQ使用长轮询pull,较低延迟的将消息获取到消费者服务
Repeat Message(消息重复)
At least Once(消息至少投递一次):Consumer只有消费成功才会ACK,但是不保证广播每个consumer都能收到消息
Exactly Only Once(消息仅一次):业务控制-不能重复生产;业务控制-不能重复消费;
RocketMQ不能严格保证不重复;当消息状态不可知时,会重复;网络问题;宕机问题等
Consume Again(消息回溯/重新消费)
RockerMQ可以按照时间回溯消费
Store(消息存储)
Consume Queue
~/store/consumequeue/${topic}/${queue}/${file},用于记录位置信息,定位commitlog内位置(offset记录)
Commit Log
消息内容的物理文件(mapped),通过Consume Queue的offset信息指定
config
consumerOffset
consumerOffset.json
offsetTable(标记所有消息消费offset的数据)
key:topic@consumergroup
通常集群会有效维护/广播会在本地再维护一个
delayOffset
存储延迟消息数据
delayOffset.json
subscriptionGroup
存储所有消费组的配置信息
subscriptionGroup.json
topics
存储所有的topic信息
topics.json
index
索引结构维护
Send Message(消息发送)
同步、异步、单向
还有物理结构图,逻辑结构图,管理台说明。这些部分绘图需要一定时间,后续抽空补充。
网友评论