我负责操作两个kafka集群(一个用于prod,一个用于我们的dev环境)。设置大部分是类似的,但是开发环境没有SASL / SSL设置,仅使用4个代理而不是8个代理。每个代理都分配给具有4个vCPU和26GB RAM的专用google kubernetes节点。
在我们的开发环境中,我们每秒大约接收1000条消息,并且这4个代理中的每个代理都使用4个可用CPU内核中的3个(始终占75%的CPU利用率)。
在我们的生产环境中,我们每秒获得约1500条消息,并且CPU使用率也是4个内核中的3个。
看来,CPU使用率至少是我们的瓶颈,我想知道如何执行CPU配置文件,以便我确切地知道造成CPU使用率高的原因。由于它是相对一致的,我猜可能是我们的快速压缩。
我对所有想法都感兴趣,我该如何调查CPU使用率高的原因以及如何在集群中进行调整。
Apache Kafka版本:2.1(CPU负载以前在Kafka 0.11.x上也很相似)
开发集群(快速压缩,无SASL / SSL,4个代理):每秒1000条消息,3个CPU核心的使用率一致
产品集群(Snappy压缩,SASL / SSL,8个代理):每秒1500条消息,使用3个CPU核心
旁注:我已经确保生产者快速生成压缩的消息。我可以访问所有JMX指标,但是找不到任何有用的方法来弄清楚CPU的使用情况。
我已经将度量标准附加到了我的方法(这也是我从中获得CPU使用情况统计信息的地方)。问题在于容器的CPU使用率并没有告诉我为什么它这么高。我需要更多的粒度,例如花在哪些CPU周期上(压缩?代理通信?sasl / ssl?)。
如果您有权访问JMX指标,则几乎可以完成CPU剖析。所有要做的就是安装Prometheus和Grafana,然后将指标存储在Prometheus中并使用Grafana对其进行监视。您可以在监控Kafka中找到完整的步骤
注意:如果您对快速压缩感到怀疑,也许此性能测试可以帮助您
更新:
基于Confluent,大多数CPU使用率是由于SSL。
请注意,如果启用了SSL,则对CPU的要求可能会更高(确切的详细信息取决于CPU类型和JVM的实现)。
您应该选择具有多个内核的现代处理器。通用集群利用24台核心计算机。
如果需要在速度更快的CPU或更多核心之间进行选择,请选择更多核心。多核提供的额外并发性将远远超过稍快的时钟速度。
归档时间: |
|
查看次数: |
2046 次 |
最近记录: |