首页 > 其他分享 >一次Kafka调优总结

一次Kafka调优总结

时间:2024-11-23 16:58:06浏览次数:7  
标签:总结 sysctl kafka etc 调优 内存 net Kafka dirty

概述

kafka设计的初衷是迅速处理小量的消息,一般1-10K大小的消息吞吐性能最好,kafka broker的默认配置也是以1-10K消息为基准配置的,如果程序生产消费的消息都不大于10K,可以在只调优JVM,其他使用默认配置就能让kafka达到一个比较高的性能。

如果涉及到大消息和大流量,请先确定好实际环境的消息的最大值、生产消费的吞吐量、磁盘数、磁盘IO速率等后,再讨论kafka集群流量、topic、partition、磁盘的多少。一般来说,一个kafka集群中,总的partitions数不应该超过3000,针对大流量的topic,建议一个消费组对应一个topic,而partition至少保证一个磁盘上放一个partition,比如12块盘,那就创建12个partition的topic,kafka会自动将parition目录均匀分配到各个磁盘,前提是kafka配置了多目录挂载多磁盘。

系统优化篇

1、虚拟内存

        对于大多数依赖吞吐量的应用程序来说,要尽量避免内存交换、内存页和磁盘之间的交换对Kafka各方面的性能都有重大影响。Kafka大量地使用系统页面缓存,如果虚拟内存被交换到磁盘,说明已经没有多余内存可以分配给页面缓存了。Kafka的机器上可以设置vm.swappiness为0,不允许内存交换。

另外,vm.max_map_count这个配置为进程可以具有的最大内存映射区域数,Kafka使用page cache技术,也就是用户态内存映射内核态内存,这样可以让刷盘快速。前提就是这种映射关系也是有数量限制的,所以一般都会把这个数值配成大于10万

如下是某次性能调优的配置

vim /etc/sysctl.conf
vm.max_map_count=655300
vm.swappiness=0
sysctl --system

        Kafka刷盘的机制可以直接使用系统的配置,它使用系统缓存页pagecache来缓存消息,而内核会将被写入的系统页面标记为dirty,并将其加入dirty list中。内核会周期性地将dirty list中的page写回到磁盘上,从而使磁盘上的数据和内存中缓存的数据一致。

当满足以下两个条件之一将触发脏数据刷新到磁盘操作:

  1. 数据存在的时间超过了dirty_expire_centisecs(默认300厘秒,即30秒)时间;
  2. 脏数据所占内存 > dirty_background_ratio,也就是说当脏数据所占用的内存占总内存的比例超过dirty_background_ratio(默认10,即系统内存的10%)的时候会触发pdflush刷新脏数据。

vm.dirty_background_ratio:该值指的是系统内存的百分比,当缓存数据达到该值时触发将脏页刷盘动作。该值应该小于10,大部分情况下设为5

vm.dirty_ratio:该值是指系统内存的百分比,当缓存数据达到该值时,系统会停止所有的应用层的IO写操作,等待刷完数据后恢复IO。它应该要大于20,60-80是比较合理的区间,写压力大的时候请调大该参数

vm.dirty_expire_centisecs:这个参数会和参数vm.dirty_background_ratio一起来作用,一个表示大小比例,一个表示时间;即满足其中任何一个的条件都达到刷盘的条件

    如下为某次性能调优的配置:

touch /etc/sysctl.d/kafka-optimization.conf
echo vm.dirty_background_ratio=1 >> /etc/sysctl.d/kafka-optimization.conf
echo vm.dirty_ratio=80 >> /etc/sysctl.d/kafka-optimization.conf
echo vm.dirty_expire_centisecs=1000 >> /etc/sysctl.d/kafka-optimization.conf
sysctl --system

2、磁盘

        若使用云盘则忽略该优化,磁盘本身建议使用SSD和使用RAID,另外文件系统建议使用XFS格式,另外在设置磁盘挂载点的时候设置noatime(最后访问时间)参数,Kafka未使用该属性,可以将其禁掉,不影响 其他功能。

3、网络

        若有专门团队负责网络优化,请使用专业方案。一般情况下,系统内核没有针对快速的大流量网络传输进行优化。Kafka的网络配置与其他大部分Web服务器或网络应用程序的网络配置是一样的。

socket读写缓冲区:

net.core.wmem_default与net.core.rmem_default:合理值 131072 (128KB)

net.core.wmem_max与net.core.rmem_max : 合理值 2097152 (2MB)

tcp socket读写缓冲区:

net.ipv4.tcp_wmem与net.ipv4.tcp_rmem :合理值 4096 65536 2048000 (表示 最小值4KB,默认值64KB,最大值2MB)

注意:当吞吐量非常大时,也可以适当调高读写缓冲区的大小

    如下是某次性能调优的配置

touch /etc/sysctl.d/kafka-network.conf
echo net.core.wmem_default = 8388608 >> /etc/sysctl.d/kafka-network.conf
echo net.core.rmem_default = 8388608 >> /etc/sysctl.d/kafka-network.conf
echo net.core.wmem_max= 16777216 >> /etc/sysctl.d/kafka-network.conf
echo net.core.rmem_max= 16777216 >> /etc/sysctl.d/kafka-network.conf
echo net.ipv4.tcp_rmem = 4096 87380 6291456 >> /etc/sysctl.d/kafka-network.conf
echo net.ipv4.tcp_rmem = 4096 87380 6291456 >> /etc/sysctl.d/kafka-network.conf
sysctl --system

4、JVM

Java的垃圾回收器的参数配置需要大量的观察和试错,不过G1垃圾回收器只需要很少的配置就能完成这些配置。

MaxGCPauseMillis:每次垃圾回收默认的停顿最大时间,默认是200ms

InitiatingHeapOccupancyPercent:堆内存使用率达到该值时会触发新一轮的垃圾回收,默认是45

Kafka对堆内存的使用率非常高,容易产生垃圾对象,所以垃圾回收的时间可以设置小点,堆内存回收比列也可以设置小点。

标签:总结,sysctl,kafka,etc,调优,内存,net,Kafka,dirty
From: https://blog.csdn.net/youyou263/article/details/143952755

相关文章

  • 2024.11.21随笔&联考总结(补)
    前言都过了几天了,但是还是大概写一下吧,希望不要耽误太多时间。考试第一题签到题直接做。第二题一眼是矩阵乘法优化dp,然后大概看了几眼先不管去看第三题。然后第三题是数学题,感觉很可做。然后看到部分分感觉像是提示,于是就顺着想,大概思路都想好了,就是有一个情况求方案数的时候......
  • OOPTA4-6习题集总结
    (1)前言这三次作业算是一个渐进和转折的过程,题目渐渐减少,主要还是要写迭代题,对我来说5-6难度还是蛮大的。4是让我学会了不少更新功能的思路和调试的方法。5-6则让我明白了代码结构的重要性。题目内容主要涉及类的设计等等,以及主要的答题判题程序还有电路系统的编写与迭代。在这三次......
  • # 2024-2025-1 20241310 《计算机基础与程序设计》第九周学习总结
    2024-2025-120241310《计算机基础与程序设计》第九周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第一周作业这个作业的目标自学教材《计算机科学概论(第七版)》第10,11章并完成云班......
  • 8.12~8.24总结
    8.12[ARC159B]GCDSubtraction题意:没必要讲,就是题面。按题目直接模拟会超时,考虑优化。发现在\(a,b\)互质时特别慢,每次只能减一,因此应将减一的操作合并。设会减\(x\)次一,则\(\gcd(a-x,b-x)=c(c\ne1)\)。则\(a-x\equivb-x\pmodc\),\(a\equivb\pmodc\)......
  • 题目集4~6的总结性Blog
    题目集4~6的总结性Blog一.前言在过去三次大作业程序开发的学习和实践过程中,模拟现实场景是提高设计能力和解决问题能力的绝佳途径。无论是一个复杂的考试判题系统,还是一个家居强电电路的模拟程序,都要求我们用计算机语言实现对多种逻辑和规则的精准模拟。这些程序不仅需要我们对......
  • 性能测试调优之线程池的性能优化
    做性能测试时,有些压测场景下TPS上不去,或者响应时间变长,或者直接出现一些连接被拒绝的报错,这些都有可能是tomcat的连接池不够引起的。连接池的概念线程池:是一个管理线程集合的框架,它负责维护一个线程集合,这些线程可以在需要时被重用,从而减少了线程创建和销毁的开销,用于优......
  • Java 题目集 4 - 6 总结
    一、前言在Java编程学习的漫长道路上,题目集4-6犹如一座座充满挑战与机遇的山峰,促使我们不断攀登,拓展知识边界,提升编程技能与思维深度。这一系列题目集犹如一场全方位的能力试炼,全面检验了我们在多个关键领域的知识掌握程度与实践应用能力。从知识点的覆盖范围来看,题目集4......
  • 题目集4~6的总结
    题目集4~6的总结一、前言1.这是第二次写博客了,对一些格式还是有一点了解的。看了一下上次的博客,还是有一些问题的,封面也不太好看,但是自己写的不能嫌弃。还是要夸一下自己还能写博客了。从第四次作业就加上了继承的使用,涵盖面向对象编程中的类与对象、继承、多态概念,以此构建出不......
  • Linux内核调优
    为了让系统能够支持更大的并发,除了必须安装event扩展之外,优化linux内核也是重中之重,以下优化每一项都非常非常重要,请务必按逐一完成。参数解释:max-file:表示系统级别的能够打开的文件句柄的数量。是针对整个OS而言,并不是针对用户的。ulimit-n:表示控制进程级别能够打开的文......
  • 2024-2025-1 20241318《计算机基础与程序设计》第九周学习总结
    这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP(这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09这个作业的目标<操作系统责任内存与进程管理分时系统CPU调度文件、文件系统文件保护......