Ubuntu环境下提升Kafka性能的优化策略
-Xmx4G -Xms4G),避免频繁垃圾回收(GC)导致的停顿;选择G1GC垃圾回收器(-XX:+UseG1GC),兼顾吞吐量与停顿时间。net.core.somaxconn=32768、net.ipv4.tcp_max_syn_backlog=16384),提高网络传输效率。ulimit -n 65535),避免因连接数过多导致服务拒绝。noatime选项(减少文件访问时间的更新开销)。vm.swappiness=10(降低交换分区使用率,避免内存不足时频繁换页)、vm.dirty_background_ratio=10(控制脏页刷新阈值,平衡磁盘I/O与内存使用)。num.partitions):分区是Kafka并行处理的基本单位,分区数应与消费者线程数匹配(如消费者组有10个线程,分区数建议≥10),提升并行消费能力;default.replication.factor):建议为3(确保数据可靠性),并通过min.insync.replicas=2(acks=all时)保证数据一致性,避免因副本同步问题导致写入失败。num.network.threads:设置为CPU核心数的50%(如8核则设为4),负责处理网络请求;num.io.threads:设置为CPU核心数的50%(如8核则设为4),负责磁盘I/O操作(如日志写入、读取);log.segment.bytes=1G(单个日志段文件大小),避免频繁切换日志段导致的性能开销;log.retention.hours=72(日志保留时间,根据业务需求调整),定期清理过期日志;log.cleanup.policy=compact),针对关键主题减少存储占用(仅保留最新键值对)。batch.size(如256KB-1MB):将多条消息合并为一个批次发送,减少网络请求次数,提升吞吐量;linger.ms(如10-100ms):让生产者在发送前等待一段时间,聚合更多消息(需平衡延迟与吞吐量,如linger.ms=50可在延迟增加10ms内提升20%吞吐量);compression.type=lz4(推荐):在保证CPU开销可控(约增加10%-20%)的前提下,减少网络传输数据量(压缩率约2-3倍)。acks:acks=1(默认,Leader确认即可,平衡可靠性与吞吐量)、acks=all(所有ISR副本确认,最高可靠性,但吞吐量会下降);enable.idempotence=true:避免消息重复(幂等性),配合acks=all可实现“精确一次”语义。fetch.min.bytes(如1MB):消费者每次从Broker拉取的最小数据量,减少网络请求次数;fetch.max.wait.ms(如1000ms):当未达到fetch.min.bytes时,等待的最长时间(平衡延迟与吞吐量,如fetch.max.wait.ms=1000可在延迟增加1s内提升30%吞吐量);max.poll.records(如500-1000):每次poll调用返回的最大消息数,提升单次处理的吞吐量。server.log),排查异常(如分区Leader切换频繁、副本同步滞后);清理旧日志(如超过7天的数据),释放磁盘空间。