主要分为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消耗的时间

kafka性能调优方案 kafka参数调优_调优


如果你发现 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脚本中配置