RocketMQ日志写入双Master测试【双Master一个NameServer测试】
NameServer-[云主机]
Master-a[云主机]
Master-b[本地]
4个读队列,4个写队列. 可读可写权限.
测试场景
- 同步发送10000条 【8个读队列,8个写队列】
- 同步发送1000条,中间正常停止broker-b 【4个读队列,4个写队列】
- 异步发送1000条,中间停止broker-b 【4个读队列,4个写队列】
- oneway发送2000条,中间停止broker-b 【4个读队列,4个写队列】
测试结果
- 同步发送10000条,broker-a/broker-b[8个读队列,8个写队列] 每个队列625条数据,测试结果正常,符合预期
- 同步发送1000条,中间正常停止broker-b,后续统计1000条,无数据丢失,符合预期
- 异步发送2000条,中间停止broker-b,丢失150条上下
- oneway发送2000条,中间停止broker-b,后续又启动broker-b, 丢失100+条消息. 丢失消息符合预期
测试结论
除非是使用同步的发送方式,否则还是有消息丢失的危险. 异步重试是在消息发送失败之后在去重试,是在broker收到消息以后,但是拒绝了该消息以后去重试,测试的情况是直接停止broker,导致异步消息不会去重试而导致消息丢失.
- 追求消息不丢选择同步发送,对性能有较大影响需要要合理设置超时时间.
- 允许丢失少量消息可以选择异步|oneway的方式去发送.