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条数据,测试结果正常,符合预期

image.png

  • 同步发送1000条,中间正常停止broker-b,后续统计1000条,无数据丢失,符合预期

image.png

  • 异步发送2000条,中间停止broker-b,丢失150条上下

image.png

  • oneway发送2000条,中间停止broker-b,后续又启动broker-b, 丢失100+条消息. 丢失消息符合预期

image.png

测试结论

除非是使用同步的发送方式,否则还是有消息丢失的危险. 异步重试是在消息发送失败之后在去重试,是在broker收到消息以后,但是拒绝了该消息以后去重试,测试的情况是直接停止broker,导致异步消息不会去重试而导致消息丢失.

  • 追求消息不丢选择同步发送,对性能有较大影响需要要合理设置超时时间.
  • 允许丢失少量消息可以选择异步|oneway的方式去发送.