1 文件描述符
kafka读写磁盘会频繁的创建并修改文件系统中的文件,主要有下面3类
日志文件
索引文件
元数据文件
一个broker需要控制的文件数 近似 等于
(一个topic分区大小 / 分区段文件大小 ) * 3 * 所有topic分区数总和
比如一个partition(topic 分区) 大小为200G, 一个partition segment(分区段文件)大小为10G, 并且该broker上面有100个topic分区
则 该broker上面需要维护的文件个数为 (200 / 10) * 3 * 100 = 6000
查看linux系统限制参数
[bigdataservice@hadoop]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 256897
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 102400
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
可以看到这一行参数配置open files (-n) 102400
由此可知系统允许的打开最多文件数为102400
如果要进行重新设置的话只需 执行下面的命令
ulimit -n 102400
2 Socket 缓存大小
3 文件系统尽量采用xfs格式的,实在不行,也得是ext4
XFS是高性能文件系统,CentOS7, CentOS8默认文件系统都是XFS格式的
4关闭swap
sysctl vm.swapiness = <一个较小的数值>
5 设置更长的flush时间
查看页缓存刷盘参数
sysctl -a | grep dirty
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 30
vm.dirty_writeback_centisecs = 500
kafka时依赖OS页缓存的flush功能实现消息的真正落盘,默认刷盘间隔时5秒,可适当调大