Rocketmq 常见错误和性能优化,system busy

Rocketmq 相传都是亿级消息吞吐能力,但是配置不对,使用不当会导致Rocketmq的性能大大折扣
 

刷盘策略

首先在看问题之前我们看看Rocketmq的刷盘策略,RocketMQ 的所有消息都是持久化的,先写入系统 PAGECACHE,然后刷盘。

总共有两种刷盘策略 异步刷盘和同步刷盘

 

异步刷盘

    异步从表面意思我们也能看出来,我们消息首先存入内存,有异步线程来完成消息的持久化。

同步刷盘

同步刷盘与异步刷盘的唯一区别是异步刷盘写完 PAGECACHE 直接返回,而同步刷盘需要等待刷盘完成才返回, 同步刷盘流程如下:

(1). 写入 PAGECACHE 后,线程等待,通知刷盘线程刷盘。 (2). 刷盘线程刷盘后,唤醒前端等待线程,可能是一批线程。 (3). 前端等待线程向用户返回成功。
 

综上我们可以看出来异步刷盘的性能要远远大于同步刷盘

因为我们是物联网使用场景,允许小概率的事件丢失,所以我们选择的是异步刷盘策略,虽然是异步刷盘,但是如果不优化配置还是会出现以下常见错误

  • [REJECTREQUEST]system busy, start flow control for a while
    
  • broker busy, start flow control for a while

如何优化呢

1、开启异步刷盘,这个要根据业务需求来,金融系统就不建议了。

2、一定要开启内存池化空间管理 ,效果非常明显

    transientStorePoolEnable=true
    transientStorePoolSize=5  (一个代表1G,根据机器内存决定)

你可能感兴趣的:(Rocketmq,消息队列,mq)