【尚硅谷】2021新版RocketMQ教程丨深度掌握MQ消息中间件
消息生产producer获取nameserver的topic路由表 , 向指定的broker的queue发送消息
消息写入一个broker中所有topic消息都在commitlog中 , 满1g后生成新的 , 文件名为第一条消息的空间大小偏移量 , 每条消息都会记录当前的消息偏移量 , comsumequeue , 生产者 , 消息长度 ;
向commitlog中记录queue索引的具体消息 , 再向topic中的comsumequeue写索引信息 , 索引信息记录了该条消息处于commitlog的偏移量 , 同一个queue中的消息的tag可能是不同的
消息读取consumer获取broker中queue当前消费位置, 计算offset , 像 broker提交 queue , queueoffset , tag信息 , 在对应的comsumequeue中找到索引, 再计算commitlog的实际偏移量获取实际消息体
性能零拷贝 , comsumequeue的cache顺序写读 , 页预读机制 , commitlog存放所有topic消息 , 存在随机读写
生产者发送给queue选择轮询 或者 选择当前rt最短的节点
轮询 , queue接受响应延迟 , 影响之后的消息发送 , 导致producer中消息积压;
最短rt , 可能消息都发送到一个queue中, 对应的消费者压力增大
indexfile针对包含key的消息创建的索引 , 索引文件名为创建的时间戳 , 指定时间条件查询消息;
每个indexfile记录了最多2000w个索引单元 , 每个索引单元记录了消息在commitlog的物理偏移量;
消费类型可选拉取 和 推送 , 推送consumer与queue维持长连接 , 有消息时, broker触发consumer的回调 , 通知comsumer拉取消息
消费模式广播 , 集群; 广播每个topic的消息都会发送给consumerGroup下的所有consumer, 消息进度在consumer端保存; 集群只会给同一consumerG的consumer发送消息 , 消费进度在broker端保存;
rebalance在集群消费模式下 , 消费者, queue数量变化 需要重新分配queue与consumer的对应关系 ;
这种情况会导致消费暂停 , 消息积压, 如果是异步提交ack , 还会导致消息的重复消费 ,



