kafka 集群启动后,系统缓存一直增大

夏天 发表于: 2020-11-18   最后更新时间: 2020-11-18 10:18:40   1,951 游览

我的 kafka 集群一共 3 个节点,348个主题,一共 1101 个分区。
启动集群开始传输数据后,发现下图中的 “buff/cache”一直在增大,每秒增加 10M左右,最终会导致 内存越来越小,集群性能大幅降低(BytesIn 和 BytesOut 速度从 3M/s 降低到 60k/s) screenshot

请问这个该怎么解决呢?

环境:

  • kafka 2.3
  • java 1.8
  • Linux 3.10.0-514.el7
发表于 2020-11-18

kafka集群利用了该机器其他未使用的内存来缓存消息,当有其他进程启动时候,这部分内存是会回收的,就是 buff/cache
性能是如何进行测试的?你要先check下机器的io,网络是否有瓶颈,这种会影响kafka性能。理论上kafka集群会是一个比较平均的水平。

夏天 -> 半兽人 4年前

感谢解答。性能测试是根据 JMX 进行的。网络没问题。

夏天 -> 半兽人 4年前

如果页缓存 所占的内存 会被回收,请问 集群的吞吐量降低,可能是什么原因呢?

半兽人 -> 夏天 4年前

页缓存利用了可利用的空闲内存,一次性flush数据到磁盘,这样性能最高。

另外,你的吞吐是如何判断的?我需要知道你具体是这么评判的

夏天 -> 半兽人 4年前

吞吐量的判断,我是用 kafka egale 和 kafka 自带的 jmxtool,查看 MessageInPerSec、BytesInPerSec 和 BytesOutPerSec。

半兽人 -> 夏天 4年前

ok,性能下降是持续性的,还是周期性的呢

夏天 -> 半兽人 4年前

持续性的。当天用生产环境做测试,集群运行了10个小时左右,系统共 32G的内存,最后buff/cache 用了 21G左右,剩余 5G空闲,3个节点都是如此。
而且,关闭生产者和消费者后,buff/cache并没有下降;
删除 所有主题后,buff/cache 迅速降低,到达 600MB左右稳定。

夏天 -> 半兽人 4年前

当时情况是这样的,我用消费者往其他服务器推数,每次最多poll 50条记录,此时,生产和消费的速度稳定,可以达到 每秒几十MB,但是由于处理速度太快,导致接收数据的服务器压力很大,因此调整消费者,设置每处理一条记录 让消费者程序 sleep 0.5 秒,每处理一批记录 sleep 0.5秒。生产者程序 和 集群 都做任何修改。
结果,再次启动消费者后,就出现了吞吐量显著降低的问题。

夏天 -> 夏天 4年前

生产者程序 和 集群 都 没有 做任何修改。

夏天 -> 半兽人 4年前

再次测试时,只启动生产者,没有消费者,一共向集群发送了 2G 数据,结果 buff/cache 达到了 4G,而且还在一直增加,BytesInPerSec 只有 几十KB。

半兽人 -> 夏天 4年前

1、去掉消费者休眠是对的,会影响你监控的结果,kakfa消费者是批量拉取消息的(一次大概2000条,根据单个消息大小决定一次拉取的数量,如果单个消息过大,总条数就会减少)。

2、生产者持续向集群发送,是异步发送吗?acks设置的是什么?
另外,可参考:https://www.orchome.com/511

你这个结果很诧异,缓存影响kafka吞吐占比不是很高,不可能会掉到kb。

kakfa自带的压测命令:
https://www.orchome.com/454#item-5

夏天 -> 半兽人 4年前

生产者走的是 同步发送,ack是1。
生产者程序不是我负责的,今天我才知道,由于业务需要,故意降低生产者的发送速度,因此吞吐量低是正常的。

夏天 -> 半兽人 4年前

但是,奇怪的是,我用 kakfa自带的压测命令,
测试生产者时, buff/cache 只增加 不减少;测试消费者时,buff/cache 没有变化。
这个问题的原因 我目前还在排查中。
非常感谢您的指点。

半兽人 -> 夏天 4年前

ok,最后,增加缓存没啥可测试的,这是kafka利用空闲内存的机制,如果有其他进程需要,就会进行回收了。

你的答案

查看kafka相关的其他问题或提一个您自己的问题