Kafka配置调优
num.partitions需与消费者线程数基本相等,确保分区资源被充分利用,避免消费者闲置;num.io.threads设置为CPU核心数的50%,负责磁盘写操作,提升I/O处理能力;num.replica.fetchers设置为CPU核心数的1/3,加速副本同步;num.network.threads设置为CPU核心数的2/3,处理客户端请求,避免网络成为瓶颈。compression.type推荐使用lz4(兼顾吞吐量与CPU开销),可减少网络传输和存储压力;生产者与消费者均需开启压缩,确保端到端的压缩效果。batch.size设置为1MB(默认16KB),合并多个小消息为一个批次,减少网络请求次数;linger.ms设置为100ms以上,让生产者等待更多消息进入批次,提高批处理效率;消费者fetch.min.bytes设置为1MB(默认1KB),增加单次拉取的数据量,减少网络往返次数。acks根据业务需求设置:可靠性要求高选all(确保所有副本同步成功),性能优先选1(仅Leader副本确认);buffer.memory设置为64MB以上,作为生产者发送缓冲区,避免因缓冲区满导致消息丢失。JVM调优
-Xms(初始堆)与-Xmx(最大堆)设置为相同值(如4-16GB),避免堆大小动态调整带来的性能开销;堆内存不宜过大(超过16GB易导致Full GC延迟)。G1GC(适合Kafka的内存使用特性),设置-XX:+UseG1GC;调整-XX:MaxGCPauseMillis=100-200,控制最大GC停顿时间在100ms以内,减少对消息处理的影响。-XX:MetaspaceSize与-XX:MaxMetaspaceSize设置为256MB(存储类元数据,避免永久代溢出);-XX:MaxDirectMemorySize设置为堆内存的1-2倍(如8GB堆设为8GB),用于网络数据包缓冲,避免OOM。磁盘I/O优化
ext4或XFS文件系统(XFS对大文件支持更好),挂载时添加noatime(不更新文件访问时间)、nodiratime(不更新目录访问时间)选项,减少不必要的磁盘写入;log.segment.bytes设置为1GB(默认1GB,增大日志段大小,减少日志刷新频率);log.flush.interval.messages设置为10000(每1万条消息刷新一次)、log.flush.interval.ms设置为1000(每1秒刷新一次),平衡数据持久性与写入性能。vm.dirty_ratio(脏页占比,如20%)、vm.dirty_background_ratio(后台刷脏页阈值,如10%),控制脏页写回磁盘的频率;vm.swappiness设置为1(默认60,减少交换空间使用,避免频繁磁盘I/O);使用deadline或noop I/O调度器(noop适合SSD,减少调度开销)。网络优化
num.network.threads设置为CPU核心数的2/3,处理网络请求;socket.send.buffer.bytes与socket.receive.buffer.bytes设置为1MB(默认100KB),增加网络缓冲区大小,提高网络吞吐量。监控与迭代
kafka-topics.sh --describe查看Topic详情、kafka-consumer-groups.sh监控消费者滞后)或第三方工具(如Prometheus+Grafana监控集群指标、JMX监控JVM状态)。num.io.threads或升级SSD),持续优化集群性能。