rocketmq主从结点同步
2021-08-21 本文已影响0人
Chaweys
1、主节点Broker退出保证消息可用:
主节点Broker退出后,从节点可继续被消费者消费。
步骤:
发送一条消息,关闭主节点,关闭主节点之后不能写入;
从节点提供数据供外面消费,但不能接受新消息;
主节点上线后同步从节点已经被消费的数据(offset同步)
2、RocketMQ主从同步知识点:
Broker分为master和slave,一个master可以对应多个slave,一个slave只能对应一个master,master与slave通过相同的的BrokerName来匹配,
不同的BrokerID来定义是master还是slave。
Broker向所有的NameServer结点建立长连接,定时注册Topic和发送元数据信息。
NameServer定时扫描(默认2分钟)所有存活broker的连接,如果超过时间没响应则断开连接(心跳检测),
但是consumer客户端不能感知,consumer定时(30s)从NameServer获取topic的最新信息,所以broker不可用时,consumer最多最需要30s才能实现。
producer的机制一样,在未发现broker宕机前发送的消息失败。
只有master才能进行写入操作,slave不允许写入只能同步,同步策略取决于master的配置。
客户端消费可以从master和slave消费,默认消费者都从master消费,如果在master挂后,客户端从NameServer中感知到Broker宕机,
就从slave消费,感知非实时,存在一定的滞后性,slave不能保证master的消息100%都同步过来,会有少量的消息丢失。
一旦master恢复,未同步过去的消息会被最终消费掉。
如果consumer的实例的数量比message queue的总数量还多的话,多出来的consumer实例将无法分到queue,
也就无法消费到消息,也就无法起到分摊负载的作用,所以需要控制让queue的总数量大于等于consumer的水量。