RocketMQ基础概念之Broker

末蓝、 2022-02-27 10:48 389阅读 0赞

Broker是RocketMQ的核心,大部分工作都在Broker中完成,包括接收请求,处理消费,消费持久,消息的HA,以及服务端过滤等都在里面完成

消息的存储和发送
因为有HA,所以需要磁盘持久化
磁盘使用的好坏,可以突破网络的瓶颈
MappedByteBuffer,基于零拷贝技术,由内核态直接往网卡上发送数据,避免了用户态的复制
存储结构
ConsumeQueue+CommitLog
ConsumeQueue类似index索引
CommitLog顺序写大大提升写的效率。
虽然是随机读,但是有pagecache机制,可以批量从磁盘读取,作为cache存到内存中,加速后续读取速度。

  1. 为了保证顺序写,ConsumeQueue里只存偏移量信息,所以尺寸有限,大部分ConsumeQueue能被完全读入内存

HA
高可用是通过Master-Slave的方式达到高可用的。brokerId为0是Master,大于0是Slave
消费端的高可用 Consumer不需要配置,如果Master不可用或者繁忙的时候,会自动切换Slave读
生产端的高可用 创建Topic的时候把多个Msg Queue创建在多个Broker组上,相同name不同id的机器为broker组,这样当一个broker组的Master不可用后其他组的Master依然可用。
暂不支持Slave自动转换为Master,需要重新配置和重启。

刷盘
顺序写,有两种刷盘方式 flushType (SYNC_FLUSH/ASYNC_FLUSH)
异步刷盘 写入的是内存的packageCache,写操作返回快,吞吐量大,内存消息积累到一定值刷盘快速写入。
同步刷盘 写入的是内存的packageCache,写入完成立马通知刷盘线程等到刷盘完成,然后唤醒等待的线程回写写入成功状态

复制
一个Broker组内Master和Slave复制。 brokerRole()
同步复制,Master和Slave都写成功才反馈客户端成功
异步复制,Master写入成功即可返回成功

发表评论

表情:
评论列表 (有 0 条评论,389人围观)

还没有评论,来说两句吧...

相关阅读

    相关 RocketMQ基础概念Broker

    Broker是RocketMQ的核心,大部分工作都在Broker中完成,包括接收请求,处理消费,消费持久,消息的HA,以及服务端过滤等都在里面完成 消息的存储和发送