首页 > 解决方案 > 如何找到 Kafka broker 高 CPU 使用率的根本原因?

问题描述

我负责操作两个 kafka 集群(一个用于生产环境,一个用于我们的开发环境)。设置大多相似,但开发环境没有 SASL/SSL 设置,仅使用 4 个而不是 8 个代理。每个代理都分配给一个专用的 google kubernetes 节点,该节点具有 4 个 vCPU 和 26GB RAM。

在我们的开发环境中,我们每秒大约有 1000 条消息,并且 4 个代理中的每一个都非常一致地使用 4 个可用 CPU 内核中的 3 个(75% 的 CPU 使用率)。

在我们的 prod 环境中,我们每秒收到大约 1500 条消息,CPU 使用率也是 4 个内核中的 3 个。

似乎 CPU 使用率至少是我们的瓶颈,我想知道如何执行 CPU 分析,以便我知道究竟是什么导致了高 cpu 使用率。由于它相对一致,我想这可能是我们的快速压缩。

我对如何调查高 cpu 使用率的原因以及如何在集群中调整它的所有想法感兴趣。

旁注:我已经确保生产者将他们的消息快速压缩。我可以访问所有 J​​MX 指标,但找不到任何有用的东西来计算 CPU 使用率。

我的 prometheus 已经附加了指标(这也是我获得 CPU 使用率统计信息的地方)。问题是容器的 CPU 使用率并没有告诉我为什么它这么高。我需要更多的粒度,例如 CPU 周期花费在什么上(压缩?代理通信?sasl/ssl?)。

标签: apache-kafka

解决方案


如果您可以访问 JMX 指标,那么您几乎可以完成对 CPU 的分析。所要做的就是安装 Prometheus 和 Grafana,然后将指标存储在 Prometheus 中并使用 Grafana 监控它们。您可以在Monitoring Kafka中找到完整的步骤

用于集群监控的 Grafana Dashboard

注意:如果您对 snappy 压缩有疑问,也许这个性能测试可以帮助您

更新:

基于Confluent,大部分 CPU 使用是因为 SSL。

请注意,如果启用 SSL,CPU 要求可能会显着提高(具体细节取决于 CPU 类型和 JVM 实现)。

您应该选择具有多核的现代处理器。普通集群使用 24 台核心机器。

如果您需要在更快的 CPU 或更多内核之间进行选择,请选择更多内核。多核提供的额外并发性将远远超过稍快的时钟速度。


推荐阅读