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, 已经是非常好的选择.
来源: https://juejin.im/post/5c0660dbe51d451a5d7e650a