缓解延时症状

  • 不要创建具备超多分区数的topic,因为适当增加分区数的确可以提升TPS,但是大量的分区的存在对于延时确实损害,分区数越多,broker端就需要越长的时间实现follower与leader的同步。
  • 适当增加Broker数来分散分区数,从而限制了单台Broker上的总分区数,减轻了单台Broker端分区访问压力。
  • 增加num.replica.fetchers参数提升broker端的I/O并行度。该值增加了broker端follower副本从leader副本处获取的最大线程数。默认值是1。
  • 和调节吞吐量相反,调优延时要求producer端尽量不要缓存消息,而是尽快地把消息发送出去。

实际可行性调优

  • producer端尽量不要缓存消息,而是尽快的将消息发送出去,又重复了一遍。
  • 设置linger.ms参数设置为0,不要让producer花费额外的时间去缓存待发送的消息。
  • 压缩是一种时间换空间的一种优化方式,为了减少网络I/O传输量,推荐关闭。compression.type=none。
  • Producer端的acks参数也是优化延时的重要手段之一,leader.broker越快的发送response,producer端就能越快地发送下一批消息。该参数默认值是1,实际上已经是非常好的设置了。
  • 调整leader副本返回的最小数据量来间接的影响Consumer端的延时,即fetch.min.bytes参数值。默认值是1,已经是非常好的选择。

参数清单

broker端

  • 适当增加num.replica.fetchers(broker端follower副本从leader副本处获取的最大线程数)
  • 避免创建过多的topic分区。

producer端

  • 设置linger.ms=0
  • 设置compression.type=none
  • 设置acks=1或者0。

consumer端

  • 设置fetch.min.bytes=1

总结

记住,调优延时要求producer端尽量不要缓存消息,而是尽快地把消息发送出去。又重复了一遍。