版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。期待加入IOT时代最具战斗力的团队。QQ邮箱地址:[email protected],如有任何学术交流,可随时联系。 https://blog.csdn.net/shenshouniu/article/details/84797677
本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。期待加入IOT时代最具战斗力的团队。QQ邮箱地址:[email protected],如有任何学术交流,可随时联系。
1 缓解延时症状
- 不要创建具备超多分区数的topic,因为适当增加分区数的确可以提升TPS,但是大量的分区的存在对于延时确实损害,分区数越多,broker端就需要越长的时间实现follower与leader的同步。
- 适当增加Broker数来分散分区数,从而限制了单台Broker上的总分区数,减轻了单台Broker端分区访问压力。
- 增加num.replica.fetchers参数提升broker端的I/O并行度。该值增加了broker端follower副本从leader副本处获取的最大线程数。默认值是1。
- 和调节吞吐量相反,调优延时要求producer端尽量不要缓存消息,而是尽快地把消息发送出去。
2 实际可行性调优
- producer端尽量不要缓存消息,而是尽快的将消息发送出去,又重复了一遍。
- 设置linger.ms参数设置为0,不要让producer花费额外的时间去缓存待发送的消息。
- 压缩是一种时间换空间的一种优化方式,为了减少网络I/O传输量,推荐关闭。compression.type=none。
- Producer端的acks参数也是优化延时的重要手段之一,leader.broker越快的发送response,producer端就能越快地发送下一批消息。该参数默认值是1,实际上已经是非常好的设置了。
- 调整leader副本返回的最小数据量来间接的影响Consumer端的延时,即fetch.min.bytes参数值。默认值是1,已经是非常好的选择。
- 本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。期待加入IOT时代最具战斗力的团队。QQ邮箱地址:[email protected],如有任何学术交流,可随时联系。
3 参数清单
broker端
- 适当增加num.replica.fetchers(broker端follower副本从leader副本处获取的最大线程数)
- 避免创建过多的topic分区。
producer端
- 设置linger.ms=0
- 设置compression.type=none
- 设置acks=1或者0。
consumer端
- 设置fetch.min.bytes=1
总结
记住,调优延时要求producer端尽量不要缓存消息,而是尽快地把消息发送出去。又重复了一遍。
秦凯新 于深圳 201812041905