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

夏天 发表于: 2020-11-18   最后更新时间: 2020-11-18  

我的 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


您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




上一条: 如何设置kafka的内存大小
下一条: 今天kafka生产环境突然报错TimeoutException: Expiring 1 record(s) for TOPICNAME-1:963170 ms has passed since batch creation

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

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

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

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

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

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

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

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

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

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

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

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