客户端发送QOS=1的消息,客户端配置maxInflight设置多大为好
具体值需要取决于客户端的处理速度及 ack 速度。
一般来说默认值 128 就是一个比较合适的值,可以开箱即用。
如果已经有了性能瓶颈或希望进行针对性优化,可以通过测试得出一个比较合理的值,并且还能检查整个系统在此处是否有性能瓶颈。
- 了解需求: 首先考虑应用场景的需求。需要同时处理多少个未应答的 QoS 1 和 QoS 2 消息?
-
模拟场景: 创建一个测试场景,模拟真实的负载情况。可以使用一个模拟工具或者自己编写测试代码,以一定速率发送 QoS 1 和 QoS 2 消息。并观察
delivery.dropped.queue_full
指标。(指标信息参考:)。
如果有增长即说明在向客户端投递消息时,由于客户端回复 ack 速度慢,导致有消息被丢弃。就需要提升客户端处理速度或通过共享订阅等方式避免消息丢弃的情况。
业务场景:
如果一个生产者同时向1万个topic发送一条消息,共一万个消息,每个topic都对应了一个消费者,消费速度非常快,这时候客户端maxInflight设置是128时,发送端可能报 Too many publishes in progress 错误,意思是超过了飞行窗口最大值,当调整客户端maxInflight为1万时,再次发送时就不报错了。
问题:
这种业务场景下maxInflight调整为1万是否可行?调整太大是否有什么隐患?
按照发布订阅模型,比较合理的设计应该是
一个生产者向某 一个主题 发布消息,一万个消费者都订阅 这个主题。
由 broker 向一万个消费者分发消息。
如果每个topic的消息都不一样,没办法使用广播,也就是每个消费者消费的消息都是不一样的,这种情况下maxInflight调整为1万是否可行?调整太大是否有什么隐患?
只要客户端有处理能力,是可以调大的。
好的,感谢