一、硬件资源优化
二、操作系统配置优化
vm.swappiness:设置为1(默认60),降低系统使用Swap的倾向,避免频繁磁盘交换导致性能下降;vm.dirty_background_ratio:设置为5(默认10),vm.dirty_ratio设置为10(默认20),控制脏页刷新的阈值,平衡I/O性能与系统响应时间;fs.aio-max-nr:增加到65536(默认65536,可根据实际情况调整),提高异步I/O操作的最大数量,提升磁盘I/O吞吐量。noatime选项(如mount -o noatime),避免不必要的文件访问时间更新,减少磁盘I/O。ulimit -n设置为65536以上(默认1024),避免Kafka因打开文件过多(如日志段文件、Socket连接)而报错;需修改/etc/security/limits.conf使设置永久生效。三、Kafka Broker配置优化
num.network.threads:设置为CPU核数+1(如8核设置为9),负责处理客户端网络请求;num.io.threads:设置为CPU核数的2倍(如8核设置为16),负责磁盘I/O操作(如日志写入、读取);num.replica.fetchers:设置为CPU核数的1/3(如8核设置为3),提高副本同步效率,避免副本滞后。num.partitions:根据业务并发需求设置(如每秒1万条消息设置100个分区),增加分区数能提高并行处理能力,但需避免过多分区导致ZooKeeper压力过大;log.segment.bytes:设置为1GB(默认1GB),控制日志段文件大小,避免频繁切换日志段导致的性能开销;log.retention.ms:根据数据保留需求设置(如7天设置为604800000),避免日志文件无限增长占用磁盘空间。-Xms4G -Xmx4G),避免堆内存过大导致Full GC停顿时间过长;-XX:+UseG1GC),相比CMS垃圾回收器,G1GC在堆内存较大时能提供更稳定的停顿时间;log.flush.interval.messages设置为10000(默认无限制),log.flush.interval.ms设置为1000(默认无限制),平衡数据可靠性与磁盘I/O性能(避免频繁刷新导致吞吐量下降)。四、生产者与消费者优化
batch.size:设置为1MB-5MB(如1MB),批量发送消息减少网络请求次数,提高吞吐量;linger.ms:设置为100ms-500ms(如100ms),等待更多消息加入批次后再发送,平衡延迟与吞吐量;compression.type:启用压缩(如lz4,默认无压缩),减少网络传输数据量和磁盘存储开销(lz4压缩率约2-3倍,CPU开销低)。fetch.min.bytes:设置为1MB(默认1字节),减少消费者拉取数据的次数,提高吞吐量;fetch.max.wait.ms:设置为1000ms(默认500ms),等待足够数据到达后再返回,避免频繁拉取小数据包;max.poll.records:设置为500-1000(默认500),每次poll操作返回的最大记录数,提高单次处理的效率;max.poll.interval.ms:设置为300000ms(默认5分钟),避免消费者处理时间过长导致rebalance(如处理一条消息耗时过长,需调整此参数)。五、网络优化
/etc/sysctl.conf中的网络参数:
net.core.rmem_default:设置为262144(默认212992),net.core.rmem_max:设置为4194304(默认212992),增加网络接收缓冲区大小;net.core.wmem_default:设置为262144(默认212992),net.core.wmem_max:设置为4194304(默认212992),增加网络发送缓冲区大小;net.ipv4.tcp_wmem:设置为4096 16384 4194304(默认4096 16384 4194304),net.ipv4.tcp_rmem:设置为4096 87380 4194304(默认4096 87380 4194304),优化TCP缓冲区设置,提高网络传输效率。/etc/sysctl.conf中添加net.ipv4.tcp_fastopen=3(启用TCP Fast Open,减少握手延迟)、net.ipv4.tcp_tw_reuse=1(复用TIME_WAIT状态的连接),提升网络并发性能。六、监控与维护
kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec)或第三方工具(如Prometheus+Grafana),实时监控集群的吞吐量、延迟、CPU/内存使用率等指标,及时发现性能瓶颈。log.cleanup.policy=delete,log.retention.ms=604800000),定期清理过期日志;使用kafka-log-dirs工具检查磁盘空间使用情况,避免磁盘空间不足导致Broker宕机。