apache-kafka - 如何找到 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 使用率的原因以及如何在集群中调整它的所有想法感兴趣。
Apache Kafka 版本:2.1(CPU 负载过去在 Kafka 0.11.x 上也类似)
开发集群(Snappy 压缩,无 SASL/SSL,4 个 Broker):1000 条消息/秒,3 个 CPU 内核一致使用
Prod 集群(Snappy 压缩,SASL/SSL,8 个 Broker):1500 条消息/秒,3 个 CPU 内核一致使用
旁注:我已经确保生产者将他们的消息快速压缩。我可以访问所有 JMX 指标,但找不到任何有用的东西来计算 CPU 使用率。
我的 prometheus 已经附加了指标(这也是我获得 CPU 使用率统计信息的地方)。问题是容器的 CPU 使用率并没有告诉我为什么它这么高。我需要更多的粒度,例如 CPU 周期花费在什么上(压缩?代理通信?sasl/ssl?)。
解决方案
如果您可以访问 JMX 指标,那么您几乎可以完成对 CPU 的分析。所要做的就是安装 Prometheus 和 Grafana,然后将指标存储在 Prometheus 中并使用 Grafana 监控它们。您可以在Monitoring Kafka中找到完整的步骤
注意:如果您对 snappy 压缩有疑问,也许这个性能测试可以帮助您
更新:
基于Confluent,大部分 CPU 使用是因为 SSL。
请注意,如果启用 SSL,CPU 要求可能会显着提高(具体细节取决于 CPU 类型和 JVM 实现)。
您应该选择具有多核的现代处理器。普通集群使用 24 台核心机器。
如果您需要在更快的 CPU 或更多内核之间进行选择,请选择更多内核。多核提供的额外并发性将远远超过稍快的时钟速度。
推荐阅读
- angular - 将参数传递给 ngOnInit 内部的方法甚至不调用服务,不记录任何内容
- python - Django 记录及其子记录,如 laravel 中的函数
- asp.net-core - SignalR 客户端是否为每个集线器请求发送身份验证 cookie
- reactjs - React 中的图像修改
- arrays - 将字符串转换为数组
- java - 数据未保存在 Firebase 实时数据库中
- webpack - 如何编译代码以使 JSON 与 webpack 的 main.js 分开?
- string - 如何将两个字符串传递给 PowerShell 函数?
- c# - c#HttpClient参数化查询
- c# - 将 SQL 表中的数据绑定到使用 C# 中的用户控件创建的自定义列表