ZooKeeper 有两层限制「同时在处理的请求数」的机制:globalOutstandingLimit 和 request_throttle_max_requests。它们的效果、副作用和能在 mntr 里看到什么,这篇都实测一遍。
默认 吞吐 9089 次/秒 max_latency 12 ms throttle 队列平均等待 0.0064 ms zk_throttled_ops 0 -Dzookeeper.globalOutstandingLimit=10 吞吐 2723 次/秒 max_latency 12 ms throttle 队列平均等待 0.0015 ms zk_throttled_ops 0 -Dzookeeper.request_throttle_max_requests=10 吞吐 3299 次/秒 max_latency 354 ms throttle 队列平均等待 266.0441 ms zk_throttled_ops 0 -Dzookeeper.request_throttle_max_requests=1 吞吐 492 次/秒 max_latency 2421 ms throttle 队列平均等待 1947.8596 ms zk_throttled_ops 0
这些参数是保护服务端不被突发流量压垮的「刹车」:设得太紧,正常流量也会被排队。数值只是本机单机的测量,不是推荐值。
['zk_avg_request_throttle_queue_time_ms', 'zk_cnt_request_throttle_queue_time_ms', 'zk_max_request_throttle_queue_time_ms', 'zk_min_request_throttle_queue_time_ms', 'zk_request_throttle_wait_count', 'zk_sum_request_throttle_queue_time_ms', 'zk_throttled_ops'] 线程: ['RequestThrottler']