首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kafka集群需要多少内存?

Kafka集群需要多少内存?
EN

Stack Overflow用户
提问于 2018-12-17 22:11:43
回答 2查看 9.3K关注 0票数 5

如何计算我的Kafka集群需要多少内存和cpu?我的集群由3个节点组成,吞吐量约为每秒800条消息。

目前他们有(每个)6 GB内存,2个CPU,1T磁盘,这似乎是不够的。你会分配多少?

EN

回答 2

Stack Overflow用户

发布于 2019-03-02 20:31:47

你需要提供一些关于你的用例的更多细节,比如消息的平均大小等,但不管怎样,这里是我的2分钱:

Confluent's documentation可能会带来一些启示:

CPU

大多数Kafka部署对CPU的要求都比较低。因此,确切的处理器设置比其他资源更重要。请注意,如果启用了SSL,则CPU需求可能会显著更高(确切的细节取决于CPU类型和JVM实现)。

您应该选择具有多核的现代处理器。普通集群使用24个核心机器。

如果您需要在更快的CPU和更多内核之间进行选择,请选择更多内核。多核提供的额外并发性将远远超过稍微快一点的时钟速度。

如何计算吞吐量

它可能对计算吞吐量也有帮助。例如,如果每秒有800条消息,每条消息有500字节,那么吞吐量就是800*500/(1024*1024) = ~0.4MB/s。现在,如果您的主题是分区的,并且您有3个代理启动并运行3个副本,这将导致每个代理的0.4/3*3=0.4MB/s

有关您的架构的更多详细信息,请参阅Confluent的白皮书Apache Kafka and Confluent Reference Architecture。下面是关于内存使用情况的部分。

ZooKeeper使用JVM堆,4 4GB内存通常就足够了。太小的堆将由于持续的垃圾收集而导致高CPU,而太大的堆可能会导致长时间的垃圾收集暂停和ZooKeeper集群内的连接丢失。

JVM代理同时使用堆和OS页面缓存。JVM堆用于代理之间的分区复制和日志压缩。对于代理上的每个分区,复制需要1MB (默认replica.max.fetch.size)。在Apache Kafka 0.10.1 (Confluent Platform 3.1)中,我们添加了一个新的配置(replica.fetch.response.max.bytes),将用于复制的总内存限制为10MB,以避免在代理上的分区数量较多时出现内存和垃圾收集问题。对于日志压缩,计算所需内存比较复杂,如果您使用该功能,建议参考Kafka文档。对于中小型部署,4 4GB的堆大小通常就足够了。此外,强烈建议消费者始终从内存读取,即从写入Kafka但仍存储在操作系统页面缓存中的数据读取。所需的内存量取决于写入此数据的速率,以及您期望消费者获得的内存落后多远。如果每个代理每小时写入20 OS,并且允许代理在正常情况下延迟3小时,则需要为操作系统页面缓存保留60 OS。在强制消费者从磁盘读取的情况下,性能将显著下降

Kafka Connect本身并不占用太多内存,但为了提高效率,一些连接器会在内部缓冲数据。如果运行多个使用缓冲的连接器,则需要将JVM堆大小增加到1 1GB或更高。

消费者每个消费者至少使用2MB,在来自代理的大响应情况下最多使用64MB (通常用于突发流量)。Producers将有一个64MB的缓冲区。从分配1 1GB开始,为每个生产者增加64MB,为每个计划的消费者增加16MB。

在调优架构的配置时,需要考虑许多不同的因素。我建议仔细阅读前面提到的文档,监控您现有的集群和资源,最后对它们进行相应的调整。

票数 12
EN

Stack Overflow用户

发布于 2019-03-02 18:02:24

我想你应该从分析你的kafka集群开始。

看这篇文章的答案:CPU Profiling kafka brokers

它基本上建议你使用prometheus和grafana堆栈在时间线上可视化你的负载-从这个你应该能够确定你的瓶颈。并链接到一篇描述如何实现的文章。

此外,你可能会发现这篇文章很有趣,因为这篇帖子似乎和你的工作量差不多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53816988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档