Kafka在CentOS上的性能优化需从配置调优、操作系统优化、硬件与网络优化、监控维护四大维度综合实施,以下是具体措施:
num.partitions需与消费者线程数基本相等(如每个消费者线程处理1个分区),提升并行处理能力;但需权衡分区过多带来的管理复杂度(如ZooKeeper压力增大)。batch.size建议设置为1MB(增大批次可减少网络往返次数,提高吞吐量);linger.ms设置为100ms以上(允许生产者等待更多消息凑满批次,平衡吞吐量与延迟)。compression.type选用lz4(兼顾压缩率与CPU开销,比gzip更高效),减少网络传输和磁盘IO开销。acks设置为1(leader写入成功即返回,平衡可靠性与延迟;若需强一致性则设为all,但会增加延迟)。buffer.memory设置为64MB以上(增加生产者缓冲区大小,避免因缓冲区满导致的阻塞)。batch.size、linger.ms外,buffer.memory需根据生产者并发量调整(如高并发场景可设为128MB),避免消息丢失。fetch.min.bytes设置为1MB(每次拉取的最小数据量,减少网络请求次数);fetch.max.wait.ms设置为1000ms(拉取等待时间,平衡延迟与吞吐量);max.poll.records设置为500以上(每次poll的最大消息数,提高单次处理效率)。XFS(对大数据量处理性能更优,支持高并发IO);避免使用EXT4(小文件处理性能较差)。noatime(禁用文件访问时间戳更新,减少磁盘IO);如mount -o noatime /dev/sdb1 /kafka/data。vm.swappiness设置为1(严格限制系统使用Swap,避免磁盘IO瓶颈);vm.dirty_background_ratio设置为10以下(后台脏页刷新阈值,减少同步IO);vm.dirty_ratio设置为60-80(强制脏页刷新阈值,平衡内存与IO)。net.core.rmem_default=262144、net.core.wmem_default=262144;net.ipv4.tcp_wmem=“4096 16384 131072”、net.ipv4.tcp_rmem=“4096 65536 1048576”),提升网络吞吐量;增加net.core.somaxconn(如设为1024),提高网络连接数上限。ulimit -n 65535增加每个进程可打开的文件数(Kafka需处理大量文件描述符,避免因达到上限导致服务异常);需写入/etc/security/limits.conf使其永久生效(如* soft nofile 65535; * hard nofile 65535)。SSD(如NVMe SSD)替代机械硬盘,大幅提升IO吞吐量(Kafka对磁盘IO依赖极高);避免使用RAID 5/6(写惩罚大,影响性能),推荐RAID 10或直接使用多块SSD组成JBOD。Prometheus+Grafana监控Kafka集群的关键指标(如Broker的CPU/内存/磁盘IO、Topic的吞吐量/延迟、消费者的消费速率/Lag);通过Kafka自带的JMX指标(如kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec)实时监控集群状态。log.segment.bytes设置为1GB,避免单个日志段过大);设置日志保留策略(如log.retention.hours=168,保留7天日志),避免磁盘空间耗尽。kafka-topics --describe命令),确保ISR副本正常(避免因ISR副本不足导致性能下降);采用滚动重启方式更新消费者实例(避免集体重启触发重平衡,影响消费效率)。以上优化措施需根据实际业务场景(如吞吐量、延迟、可靠性要求)调整,并在测试环境中验证效果后再应用于生产环境。