Ubuntu上Kafka优化策略
-Xms与-Xmx设为相同值,避免频繁扩容),建议不超过服务器物理内存的50%-70%(如8GB内存可设为4GB-6GB);同时确保操作系统有足够空闲内存,避免触发磁盘交换(swap),影响性能。atime更新(减少磁盘I/O)。net.core.somaxconn(连接队列长度,建议设为1024)、net.ipv4.tcp_max_syn_backlog(SYN队列长度,建议设为8192);增大文件描述符限制(ulimit -n 65536),避免高并发下连接数不足。batch.size(从默认16KB提升至128KB-1MB),减少网络请求次数;设置linger.ms(50-100ms),允许生产端积累更多消息后批量发送;启用压缩(compression.type=snappy或lz4,平衡压缩率与CPU开销),可减少50%以上的网络传输量。acks参数——高吞吐量场景用acks=1(仅Leader确认),强一致性场景用acks=all(所有ISR副本确认)。replication.factor)设为3(保障高可用),避免过多副本导致同步延迟。num.io.threads(磁盘I/O线程,建议设为CPU核心数的2倍,如8核设为16)、num.network.threads(网络收发线程,建议设为8,适配万兆网卡),避免线程成为瓶颈。log.segment.bytes=1GB(增大日志段大小,减少分段数量及索引开销);启用log.cleanup.policy=delete(默认)并按时间(log.retention.hours=168,7天)或大小(log.retention.bytes)清理过期数据;如需保留最新消息版本(如数据库变更日志),可设为compact策略。fetch.min.bytes(从默认1字节提升至1MB),减少拉取频率;设置max.poll.records=1000(单次拉取最多消息数),降低处理开销;消费者线程数应等于分区数(如3分区用3个消费者),避免线程闲置或竞争。enable.auto.commit=true)并设置auto.commit.interval.ms=5000(5秒),平衡数据一致性与性能;如需更强一致性,可设为手动提交(enable.auto.commit=false)。logrotate工具自动管理Kafka日志(如每天轮转、保留7天、压缩旧日志),避免日志文件过大占用磁盘空间。配置示例如下(保存为/etc/logrotate.d/kafka):/var/log/kafka/*.log { daily missingok rotate 7 compress delaycompress notifempty create 644 root root sharedscripts postrotate [ ! -f /var/run/kafka.pid ] || kill -USR1 cat /var/run/kafka.pid endscript}。server.properties中设置compression.type=gzip/snappy/lz4,减少日志文件大小(如lz4压缩率约3-4倍)。UnderReplicatedPartitions、请求队列时间RequestQueueTimeMs),及时发现性能瓶颈。kafka-producer-perf-test(生产者压测)和kafka-consumer-perf-test(消费者压测)工具模拟高负载场景,验证优化效果(如调整batch.size后的吞吐量变化)。