Kafka在Linux上的调优策略
Kafka在Linux环境中的调优需围绕操作系统、JVM、Kafka配置、硬件资源及监控五大维度展开,以下是具体优化措施:
atime更新(减少不必要的磁盘写操作),示例挂载选项:noatime,nodiratime,data=writeback。ulimit -n 65535临时生效,永久生效需修改/etc/security/limits.conf(添加kafka soft nofile 65535; kafka hard nofile 65535)。net.core.rmem_max=16777216; net.core.wmem_max=16777216; net.ipv4.tcp_rmem="4096 87380 16777216"; net.ipv4.tcp_wmem="4096 65536 16777216";net.ipv4.tcp_max_syn_backlog=8192;vm.swappiness=1(值越小,越倾向于使用物理内存)。-Xms8g -Xmx8g(8GB内存服务器)。-XX:+UseG1GC; -XX:MaxGCPauseMillis=200(目标最大GC停顿时间200ms);-XX:InitiatingHeapOccupancyPercent=45(触发并发GC的堆占用率阈值)。num.network.threads:处理网络请求的线程数(默认3,高并发场景建议调整为8~16);num.io.threads:处理磁盘I/O的线程数(默认8,机械硬盘建议16~32,SSD可适当降低)。socket.send.buffer.bytes:发送缓冲区大小(默认100KB,高吞吐场景建议调整为1MB~4MB);socket.receive.buffer.bytes:接收缓冲区大小(默认100KB,同上调整);socket.request.max.bytes:单次请求最大字节数(默认100MB,避免过大导致内存溢出)。log.retention.hours:日志保留时间(默认168小时/7天,可根据业务需求调整为24~72小时或更长);log.segment.bytes:单个日志段大小(默认1GB,建议调整为1GB~2GB,减少日志段数量,提升清理效率);log.cleanup.policy:日志清理策略(默认delete,若需保留消息历史可选择compact,适用于变更日志场景)。num.partitions:主题分区数(默认1,需根据生产者吞吐量和消费者并发数调整,建议分区数≥消费者数量×2,以提升并行处理能力);default.replication.factor:默认副本因子(默认1,高可用场景建议设置为3,确保数据冗余)。gzip(高压缩比,低CPU消耗)、snappy(低延迟,中等压缩比)、lz4(平衡压缩比与速度)。示例:compression.type=gzip。server.log、controller.log),设置日志轮转策略(如log4j.appender.ROLLINGFILE.MaxFileSize=100MB),避免日志占用过多磁盘空间。kafka-log-dirs命令清理过期日志(根据log.retention.hours设置自动清理);kafka-topics.sh --describe查看ISR集合,确保副本数量符合预期);