38 调优kafka

操作系统调优

1.禁止atime更新,减少文件系统的写操作。
mount -o noatime
2.选择高性能的文件系统,如ext4或者XFS
3.swap空间设置,将swappniness设置成很小的一个值比如1~10,防止linux OOM Killer 开启随意杀掉进程。
swappiness的值是个参考值,是否会发生swap跟当前是哪种page reclaim及系统当前状态都有关系,所以设置了swappiness=0并不代表一定没有swap发生,同时设为0也确实会可能发生OOM。
swappniness的值范围是0-100,数值越低,操作系统越倾向于在物理内存中保存进程数据;数值越高,操作系统越倾向于将进程数据交换到交换分区。
swap操作是磁盘IO操作。
https://www.linuxprobe.com/linuxkernel-swappiness-meaning.html
https://blog.itpub.net/69920922/viewspace-2724962/
4.ulimit -n
在linux操作系统中用于限制进程能够打开的文件描述符的最大数目。
5.vm.max_map_count
用于限制单个进程可以拥有的内存映射区域数量。linux中每个进程可以使用mmap()系统调用来请求操作系统映射一段虚拟地址到物理内存,以便访问某个文件或者共享内存。
mmap将虚拟内存空间映射到文件的页缓存,对虚拟内存的读写操作相当于直接对文件进行读写操作。
https://cloud.tencent.com/developer/article/2144681
6.操作系统页缓存
给kafka预留的页缓存越大越好,至少要能容纳一个日志段,这样消费者在消费的时候能够直接命中页缓存,避免昂贵的磁盘IO操作

JVM调优

1.堆设置
设置为FullGC后存活对象总大小的1.5-2倍
2.GC收集器
选择G1,比CMS优化难度小。要避免FullGC,可以通过JVM 参数 -XX:+PrintAdaptiveSizePolicy排查
3.大对象
报错too many humongous allocations。如果消息体很大,容易导致大对象分配问题。可以通过增加堆大小和区域大小解决。
生产消息写入到磁盘这个过程,可以不经过用户程序直接写入吗?就像消费消息使用sendfile

broker端调优

你可能感兴趣的:(kafka核心技术与实战,kafka)