【问题标题】:How to calculate how much memory needs Kafka Broker?如何计算Kafka Broker需要多少内存?
【发布时间】:2018-01-18 08:58:06
【问题描述】:

在给定吞吐量、平均消息大小和保留时间的情况下,如何计算 Kafka Broker 需要多少内存。

正如我在我们的监控系统中看到的那样,我问的是,在启动后,Kafka 代理线性增加了使用的 JVM 堆。 在某些时候,我们得到了 OutOfMemoryError。

我们将 JVM Heap 扩展了几次,但问题仍然存在。

所以最好不要通过实验来猜测 Kafka 需要什么,而是计算出值:-)。

【问题讨论】:

    标签: java memory-management configuration apache-kafka out-of-memory


    【解决方案1】:

    很难计算出精确值,但您可以使用Kafka documentation 中的经验法则:

    您需要足够的内存来缓冲活跃的读取器和写入器。您可以通过假设您希望能够缓冲 30 秒并将您的内存需求计算为 write_throughput*30 来粗略估计内存需求。

    同样,从 1.0.0 开始,您可以使用 queued.max.request.bytes 来限制代理可以用于传入请求的内存量。这可以帮助您避免 OOM,如果您可以通过以下方式监控其使用情况:

    kafka.network:type=SocketServer,name=MemoryPoolAvailable
    kafka.network:type=SocketServer,name=MemoryPoolUsed
    

    这应该可以让您确定您的工作负载需要多少内存,而不会出现太多问题。

    【讨论】:

    • 我的吞吐量非常低,但该规则对我不起作用 - 不知何故。仅来自我拥有的 3 个安装(每个两个 Kafka 节点)的数字,我通过监视有关已用堆的 JMX 信息来测量。 1. 吞吐量 3,8 MB/s。预期内存使用量:114MB,最小使用堆在 1300 MB,峰值 4200MB。 2. 吞吐量 1,0 MB/s。预期内存使用量:30MB,最小使用堆 400MB,峰值 1000MB。 3 吞吐量 0.3 MB/秒。预期内存使用量:9 MB,最小使用堆 330 MB,峰值 1000 MB。所以要添加大约 330 MB 的偏差,并且通过 min-s 的回归导致 coeff: 320*throughput 而不是 30
    猜你喜欢
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2020-07-11
    • 2020-04-04
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多