首页 > 解决方案 > 如何解释 kafka 代理报告的延迟指标

问题描述

我正在查看 kafka 经纪人报告的各种延迟指标以将它们包含在 grafana 仪表板上,但我很难理解报告的指标。我已通过 JMX 导出器将指标导出到 prometheus。例如,让我们采用 Produce Request Total 时间指标。(kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Produce)

  1. 当我用 "kafka_network_requestmetrics_totaltimems_count{request="Produce"}"

,我得到一些大数字。例如 56459366。大数字是什么意思?

  1. 当我用 查询普罗米修斯时"kafka_network_requestmetrics_totaltimems{request="Produce"}",我得到 6 行。例如跟随
kafka_network_requestmetrics_totaltimems{instance="10.130.12.24:8020",job="kubernetes-pods",pod="kafka-0",quantile="0.50",request="Produce"}    2
kafka_network_requestmetrics_totaltimems{instance="10.130.12.24:8020",job="kubernetes-pods",pod="kafka-0",quantile="0.75",request="Produce"}    2
kafka_network_requestmetrics_totaltimems{instance="10.130.12.24:8020",job="kubernetes-pods",pod="kafka-0",quantile="0.95",request="Produce"}    3
kafka_network_requestmetrics_totaltimems{instance="10.130.12.24:8020",job="kubernetes-pods",pod="kafka-0",quantile="0.98",request="Produce"}    12.42
kafka_network_requestmetrics_totaltimems{instance="10.130.12.24:8020",job="kubernetes-pods",pod="kafka-0",quantile="0.99",request="Produce"}    21
kafka_network_requestmetrics_totaltimems{instance="10.130.12.24:8020",job="kubernetes-pods",pod="kafka-0",quantile="0.999",request="Produce"} 54 

这些不同的分位数指标是什么意思,我如何计算出这些的平均值?

  1. 经纪人多久更新一次这些指标?

标签: apache-kafkajmx

解决方案


该计数只是自代理上升以来测量的 Produce 请求的数量。对于经纪人收到的每个生产请求,它都会测量处理时间。所以它是一个单调递增的计数器。

不同的 6 行是百分位数。这意味着,在您的情况下,对于 50%(中位数)的生产请求,处理它们的时间长达 2 毫秒。75% 的请求也是如此。但是,对于 99% 的请求,处理时间长达 21 毫秒。所以你可以推断,对于中间那 24% 的请求,处理时间在 2ms 到 21ms 之间。你不能也不应该计算平均值,因为它很容易产生误导,尤其是在测量 SLA 时(正如著名的笑话所说——如果统计学家的脑袋在炉子里,而他的腿在冰箱里,那么他平均感觉很好...)您可以找到许多解释差异的帖子,例如,这里有一个 - https://www.dynatrace.com/news/blog/why-averages-suck-and-percentiles-are-great/

至于这些指标的更新频率——它们会随着请求的到来而不断更新。直方图使用水库,为最近的样本赋予更多的权重(当你查看当前样本时,考虑一周前发生的样本是没有意义的请求时间百分位)。有不同类型的水库,我不知道这里使用的是哪一种,但为了理解这个概念,你可以阅读这篇文章 https://medium.com/expedia-group-tech/your-latency-指标可能会误导您如何使用 hdrhistogram 可以帮助 9d545b598374


推荐阅读