Skip to the content.

RocketMQ

Dledger

基于Raft协议的主从切换及数据同步。

使用

至少需要三个节点,且节点数最好为奇数,因为4个节点和3个节点的可用性相同(最多允许一个节点宕机)。

DLedgerCommitLog extends CommitLog

DlegerConfig

DledgerClientProtocol

DledgerProtocol

DledgerRpcService

DledgerLeaderElector

DledgerService

DLedgerMmapFileStore

MmapFileList

获取当前正在写的MMap,如果申请的空间超过可写的空间,会先写入一条空白的Entry,填入魔数和长度,方便解析;创建下一个MMap,然后预占住需要写入的空间;写入则是通过mappedByteBuffer写入PageCache。

DLedgerEntryPusher

启动三个线程:EntryHandler为日志接受处理线程,从节点启动;QuorumAckChecker为日志追加ACK投票处理线程,主节点启动;EntryDispatcher为日志转发线程,主节点启动。

EntryDispatcher

支持四种操作:COMPARE,与从节点日志对比;TRUNCATE,对比完成后,从节点截取日志;APPEND,追加日志;COMMIT,通知提交索引,通常会与APPEND操作合并。