【问题标题】:High CPU usage for Kafka brokersKafka 代理的 CPU 使用率高
【发布时间】:2020-11-22 01:39:49
【问题描述】:

我们正在使用带有 5 个代理的 Apache Kafka 2.2 版本。我们每天收到 5000 万个事件,但我们的 kafka cpu 使用率很高。我们正在使用默认的生产者/消费者/代理设置。

我对性能有一些疑问;

我们有不同的 kafka-streams 应用程序,它们进行聚合或连接操作以携带丰富的消息。我们所有的 kafka-streams 应用程序都包含以下设置:

  • 恰好一次:真
  • 最小同步副本数:3
  • 复制因子:3
  • 主题分区:~50-~100(拓扑不同)

当然也可能有拓扑的内部主题。我们正在将我们的工作机器扩展到至少 5 个应用程序。所以每个实例大部分时间都在为一个分区策略寻找一个线程。

但是,除了拓扑优化之外,我们可以在默认设置上做些什么吗?

除了 kafka-streams 应用程序之外,我们正在使用 spring-kafka 生产者/消费者。但就像我说的那样,我们使用的是默认设置。例如,我们在生产者端一一生产事件。

我们的吞吐量不够快,而且我们的 CPU 使用率很高。如果我们关闭我们的一些 kafka-streams 应用程序,代理负载正在减少。所以我的问题是;

exatly-once true 和复制因子为 3 的同步副本是否会对代理施加过多的负载?我不想在 prod 环境中丢失或删除我的消息,因此我的流应用程序必须由 exaclty-once true 组成,但是没有 kafka-streams 的 spring 应用程序也能很好地运行。

我想减少我们系统中代理的整体 CPU 使用负载。

如果我在生产者端使用批量生产者,减少我的容错工作人员的最小同步副本,我的 cpu 使用率会降低吗?

我想不出可选的方式。任何想法都会对我有所帮助,为什么我的经纪人 CPU 使用率非常高,例如 80-90 天左右。

什么会导致代理的 CPU 使用率过高?

【问题讨论】:

  • 您的代理的实例类型是什么? Broker的核心数和内存数是多少?

标签: java apache-kafka apache-kafka-streams


【解决方案1】:

您需要提供有关您的拓扑/集群的更多详细信息。例如;

  • 您是否看到所有代理或少数几个代理的 CPU 峰值?这可能会让您更容易解决主要问题。
  • 是否启用加密?高 CPU 使用率的罪魁祸首通常是加密。也许您的某些应用程序使用加密通道,而有些则不使用?
  • 检查您的流应用程序拓扑。错误的密钥使用可能会导致过度的重新分区,这会在 Kafka 中使用重新分区主题,并可能导致代理端和您的应用端的 CPU 使用率过高。
  • 您的消费者是否经常关闭/重新启动或无法在max.poll.interval.ms 内完成工作?如果是这样,它们将经常被重新平衡,并且经纪人在重新平衡操作中确实有一份工作,尽管如果你有很多组一直在重新平衡,这可能会显着增加。
  • 除非您对生产者使用同步发送(这会显着影响吞吐量),否则它们会被批处理并一起发送。但您可以尝试使用linger.ms 配置。这可能会影响您的生产者吞吐量。

我不认为 replication.factor 和 min.insync.replicas 配置起重要作用,但在不了解所有变量的情况下无法确定。

此外,如果您安装了监控工具,您应该检查它们是否有任何异常。

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2014-07-16
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多