RocketMQ基礎概念之Broker

mic_saber發表於2019-03-27

Broker是RocketMQ的核心,大部分工作都在Broker中完成,包括接收請求,處理消費,消費持久,訊息的HA,以及服務端過濾等都在裡面完成

訊息的儲存和傳送
    因為有HA,所以需要磁碟持久化
    磁碟使用的好壞,可以突破網路的瓶頸
    MappedByteBuffer,基於零拷貝技術,由核心態直接往網路卡上傳送資料,避免了使用者態的複製
儲存結構
    ConsumeQueue+CommitLog
    ConsumeQueue類似index索引
    CommitLog順序寫大大提升寫的效率。
    雖然是隨機讀,但是有pagecache機制,可以批量從磁碟讀取,作為cache存到記憶體中,加速後續讀取速度。
    
    為了保證順序寫,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寫入成功即可返回成功

相關文章