Skip to content

Latest commit

 

History

History
28 lines (18 loc) · 1.4 KB

1.md

File metadata and controls

28 lines (18 loc) · 1.4 KB

什么时候建议去 Slave 拉取消息

1.设置 SuggestPullingFromSlave 的值

剩余未拉取消息的内存大小超过了允许使用的最大内存阔值(物理内存的 40%)

本次拉取消息时,判断未拉取的消息大小是否超过了物理内存的 40%,如果超过了,就建议去 Slave 拉取消息。

从另一个方面说,未拉取的消息太多了,多到已经超过了内存能容纳的值,这种情况下拉取消息就可能需要读取磁盘上文件的数据,性能会比较差,所以,建议从 Slave 拉取。

    // diff: 剩余未拉取消息的大小
    
    // memory: 消息使用物理内存的最大比例,默认为 40%,
    // 即 RocketMQ 在内存中的消息最大占用物理内存的 40%
    setSuggestPullingFromSlave(diff > memory);

2.使用 SuggestPullingFromSlave 的值

SuggestPullingFromSlave == true 前提下,判断拉取消息的 Broker 判断逻辑顺序:

  • 发现消息堆积超过物理内存的 40%,则下次建议使用 brokerID = getWhichBrokerWhenConsumeSlowly() 的 Broker 去读消息
  • 如果当前 Broker 角色是 Slave,且 slaveReadEnable=false,则下次直接去 Master 拉消息
  • 如果 slaveReadEnable=true,则下次建议使用 brokerID = getWhichBrokerWhenConsumeSlowly() 的 Broker 去读消息,否则,则使用订阅组建议的 Broker 读消息
  • 其它情况使用 Master 读取消息