引用
broker启动了很多的线程和定时任务,维护系统的稳定健康运行。此文汇总以下的运行时机制。
- 刷盘机制
- slave消息同步机制(HA机制)
- 客户端管理机制
- Broker发现机制
- 多副本同步机制(DLedgerCommitLog)
- broker怎么维护新增的topic
刷盘机制
异步刷盘模式
- 每隔10s,刷新全部缓存
- 每隔500ms或者生产者消息写入buffer后唤醒线程
- broker正常关闭时,强制刷盘
同步刷盘模式
- 每隔10ms或者生产者消息写入buffer后唤醒线程
- broker正常关闭时,强制刷盘
- 此模式下,如果isWaitStoreMsgOK是true则会等待刷盘完成后返回成功
Broker发现机制
每个最少10s向nameServer发送一个心跳。把负责的topic信息发送给NameServer
Slave消息同步机制(HA机制)
异步master
生产者的消息写入buffer后不做处理,等待slave主动拉取
同步master
如果生产者的消息isWaitStoreMsgOK=false,同样是等待slave拉取
如果是isWaitStoreMsgOK=true。如果slave是可用状态,则会等待消息拉取完毕,否则只返回SLAVE_NOT_AVAILABLE给生产者,如果是同步消息此处会再次重试另一个master,保证数据不丢
slave断线重连机制
当出现读数据异常时,会进行断开连接操作。在写一次进行重新连接,执行周期为每秒。
tcp粘包和拆包
使用了定长的Head,12个字节,8个字节表示当前消息的物理offset,4个字节的变长body对size,变长的body。
使用dispatchPosition标识一个完整消息的position
只有能读取完整的消息(长度是headSize和bodySize),把完整的消息写入commitLog
把剩余的字节放在了buffer的头部,等待下一次socketChannel传输