apache-kafka - 如何解释 kafka 代理报告的延迟指标
问题描述
我正在查看 kafka 经纪人报告的各种延迟指标以将它们包含在 grafana 仪表板上,但我很难理解报告的指标。我已通过 JMX 导出器将指标导出到 prometheus。例如,让我们采用 Produce Request Total 时间指标。(kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Produce)
- 当我用
"kafka_network_requestmetrics_totaltimems_count{request="Produce"}"
,我得到一些大数字。例如 56459366。大数字是什么意思?
- 当我用 查询普罗米修斯时
"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
这些不同的分位数指标是什么意思,我如何计算出这些的平均值?
- 经纪人多久更新一次这些指标?
解决方案
该计数只是自代理上升以来测量的 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
推荐阅读
- javascript - gl-react 示例不适用于 react-native 应用程序
- python - 如何制作不期望值的命令行参数?
- c# - Unity - 尝试使用 GooglePlay 服务将播放器登录到 GooglePlay
- python - Pytest 如何在拆卸方法中获取标记参数?
- r - 有没有办法改变部分ggplot点标签格式?
- powershell - 如何使批处理文件运行powershell脚本
- azure - 在另一个项目中自动创建工作项
- c - 每个具有“类型数组”的表达式将始终转换为 C 中的“指向类型数组的指针”
- c# - 如何在 ASP.NET Core Razor Pages 项目的 _layout.cshtml 文件中使用 Razor Page Using Entity Framework 作为部分视图?
- ruby - 使用自定义模式对树类进行冰糕类型检查?