nsq延迟问题

最近发现线上使用nsq的服务平均延迟在200多毫秒,测试了发现延迟在nsq。

然后测试了,在同一个 topic 消息量不大的时候延迟很低,在1ms左右,当每秒消息超过5条的时候延迟就在200多毫秒了。其实nsq客户端的Consumer 有个配置项: OutputBufferTimeout,这个是设置在 flushing 到客户端前,最长的配置时间间隔。而默认是250ms, 配合OutputBufferTimeout的缓冲区,所以会有延迟。

解决:

1.把MaxInFlight设置成1,就不会启用缓冲区,但是这样就需要前一条消息ack后才处理下一条,所以不可取

2. 把OutputBufferTimeout设置到可以接受的数值就好了,但是注意这个值设置到小于25ms 对cpu占用比较明显。

设置示例:


cfg := nsq.NewConfig() cfg.MaxInFlight = optMaxInFlight cfg.OutputBufferTimeout = time.Millisecond * 50 consumer, err := nsq.NewConsumer(topic, channel, cfg) if err != nil { return err }

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

请输入正确的验证码