主要分为3个模块:
- JVM参数调优
- Replication参数调优
- Log参数调优
JVM参数调优
默认启动的Broker进程只会使用1G内存,在实际使用中会导致进程频繁GC,影响Kafka集群的性能和稳定性
通过jstat -gcutil <pid> 1000
查看到kafka进程GC情况
主要看YHC,YGT,FGC,FGCT
这几个参数,如果这几个值不是很大,就没什么问题
- YGC: young gc发生的次数
- YGCT: young gc消耗的时间
- FGC: full gc发生的次数
- FGCT: full gc消耗的时间
如果你发现 YGC
很频繁,或者FGC
很频繁,就说明内存分配的少了
此时需要修改kafka-server-start.sh
中的 KAFKA_HEAP_OPTS
export KAFKA_HEAP_OPTS="-Xmx10g -Xms10g
-XX:MetaspaceSize=96m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=20
-XX:InitiatingHeapOccupancyPercent=35
-XX:G1HeapRegionSize=16M
-XX:MinMetaspaceFreeRatio=50
-XX:maxMetaspaceFreeRatio=80"
Replication参数调优
- replica.socket.timeout.ms=60000
这个参数的默认值是30秒,它是控制partiton副本之间socket通信的超时时间,如果设置的太小,有可能 会由于网络原因导致造成误判,认为某一个partition副本连不上了。 - replica.lag.time.max.ms=50000
如果一个副本在指定的时间内没有向leader节点发送任何请求,或者在指定的时间内没有同步完leader中的数据,则leader会将这个节点从Isr列表中移除。
如果网络不好,或者kafka压力较大,建议调大该值,否则可能会频繁出现副本丢失,进而导致集群需要 频繁复制副本,导致集群压力更大,会陷入一个恶性循环
Log参数调优
这块是针对Kafka中数据文件的删除时机进行设置,不是对kafka本身的日志参数配置
- log.retention.hours=24
这个参数默认值为168,单位是小时,就是7天,默认对数据保存7天,可以在这调整数据保存的时间,我们在实际工作中改为了只保存1天,因为kafka中消费者中会进行备份,所以就没有必要在kafka中保留太长时间了。 在kafka中保留只是为了能够让你在指定的时间内恢复数据,或者重新消费数据,如果没有这种需求,那就没有必要设置太长时间。
Tips:
这里分析的Replication参数和Log参数都是在server.properties
文件中进行配置
JMV参数是在kafka-server-start.sh
脚本中配置