在给定troughput、平均消息大小和保留时间的情况下,如何计算kafka代理需要多少内存。我在问,正如我在我们的监控系统中看到的,在启动之后,kafka代理会线性增加使用的jvm堆。在某个时刻,我们摆脱了记忆错误。我们扩展了jvm堆几次,问题仍然存在。因此,最好不要猜测,Kafka需要什么实验,而是计算值:-)。
8dtrkrch1#
很难计算出精确的值,但您可以使用Kafka文档中的经验法则:您需要足够的内存来缓冲活动的读写器。假设您希望能够缓冲30秒,并将您的内存需求计算为write_throughput*30,您就可以对内存需求进行一次封底估计。同样从1.0.0开始,您可以使用 queued.max.request.bytes 限制代理可用于传入请求的内存量。这可以帮助您避免oom,并且如果您可以通过以下方式监视其使用情况:
queued.max.request.bytes
kafka.network:type=SocketServer,name=MemoryPoolAvailable kafka.network:type=SocketServer,name=MemoryPoolUsed
这将允许您确定工作负载需要多少内存,而不会出现太多问题。
1条答案
按热度按时间8dtrkrch1#
很难计算出精确的值,但您可以使用Kafka文档中的经验法则:
您需要足够的内存来缓冲活动的读写器。假设您希望能够缓冲30秒,并将您的内存需求计算为write_throughput*30,您就可以对内存需求进行一次封底估计。
同样从1.0.0开始,您可以使用
queued.max.request.bytes
限制代理可用于传入请求的内存量。这可以帮助您避免oom,并且如果您可以通过以下方式监视其使用情况:这将允许您确定工作负载需要多少内存,而不会出现太多问题。