1. 硬件与系统基础优化
kafka-server-start.sh脚本中添加-Xms16G -Xmx16G -XX:+UseG1GC参数。net.core.rmem_max=16777216、net.core.wmem_max=16777216)、增加文件描述符限制(fs.file-max=1000000)、优化磁盘异步I/O(fs.aio-max-nr=1048576)。这些参数可通过sysctl.conf文件永久生效。2. Kafka Broker配置优化
kafka-topics.sh --alter命令动态调整。副本因子(default.replication.factor)需平衡可靠性与性能,建议设置为3(确保数据冗余),min.insync.replicas(最小同步副本数)设置为2(保证数据一致性,避免脑裂)。batch.size(如从默认16KB调整为1MB),允许生产者积累更多消息后批量发送;设置linger.ms(如100ms),让生产者在发送前等待更多消息。启用压缩(compression.type设为lz4或snappy),可减少网络传输和存储开销(压缩率约2-3倍),但会增加少量CPU开销。num.io.threads(磁盘I/O线程数)建议设置为总核数的50%(如8核CPU设为4-6),负责日志写入和读取;num.network.threads(网络收发线程数)建议设置为总核数的50%(如8核CPU设为4-6),负责客户端请求处理;num.replica.fetchers(副本拉取线程数)建议设置为num.io.threads的1/3(如2-3),加速副本同步。3. 生产者与消费者配置优化
batch.size、linger.ms、compression.type设置)。调整buffer.memory(如64MB以上),避免生产者因缓冲区满而阻塞;设置acks为1(平衡可靠性与性能,leader确认即可)或all(强一致性,所有副本确认,适合金融场景)。fetch.min.bytes(如1MB),减少消费者拉取频率;设置fetch.max.wait.ms(如1000ms),允许消费者等待更多数据后再返回;增加max.poll.records(如1000),单次拉取更多消息,提升消费吞吐量。同时,合理设置消费者线程数(与分区数匹配),避免线程闲置。4. 监控与运维优化
UnderReplicatedPartitions、请求队列时间RequestQueueTimeMs、JVM内存使用率)。通过告警规则(如CPU使用率超过80%、磁盘使用率超过90%)及时发现性能瓶颈。log.retention.hours设置保留时间,如7天),释放磁盘空间;使用kafka-log-dirs.sh工具检查磁盘健康状态;定期升级Kafka版本(如从2.8升级到3.5),获取性能优化和新特性。