Kafka生产者Linux环境调优指南
-Xms与-Xmx设置为相同值,避免频繁扩容)。ulimit -n 65535;永久生效则修改/etc/security/limits.conf,添加* soft nofile 65535、* hard nofile 65535。net.core.wmem_default、net.core.rmem_default)和vm.swappiness(建议设置为10以下,减少内存交换),优化内存管理与网络传输效率。例如:sudo sysctl -w net.core.wmem_default=16777216
sudo sysctl -w net.core.rmem_default=16777216
sudo sysctl -w vm.swappiness=10
setenforce 0)和防火墙(systemctl stop firewalld),减少系统开销(生产环境需评估安全风险)。batch.size:增大批处理大小(建议1MB~10MB),减少网络请求次数,提高吞吐量。例如:batch.size=32768(32KB)可根据业务调整至1MB以上。linger.ms:增加等待时间(建议10ms~100ms),让生产者等待更多消息加入当前批次,提升批处理效率。例如:linger.ms=100。buffer.memory:增大生产者内存缓冲区(建议64MB~256MB),避免因缓冲区不足导致消息阻塞。compression.type:启用高效压缩算法(如lz4、snappy),减少网络传输数据量和存储空间占用(压缩率约2~5倍),但会增加少量CPU开销。例如:compression.type=lz4(推荐,兼顾性能与压缩率)。acks:根据业务需求选择应答级别:
acks=0:异步发送,无需等待broker确认(最高吞吐量,但可能丢失消息);acks=1:等待leader副本确认(平衡吞吐量与可靠性,推荐大多数场景);acks=all:等待ISR(同步副本)中所有副本确认(最高可靠性,适合金融等关键业务)。retries与retry.backoff.ms:设置重试次数(建议≥3)和重试间隔(建议100ms~500ms),应对瞬时网络故障,避免消息丢失。例如:retries=3、retry.backoff.ms=100。num.partitions:合理设置分区数(建议与消费者线程数基本相等),提高并行处理能力,充分利用集群资源。例如:若有10个消费者线程,分区数可设置为10~20。-XX:+UseG1GC。-Xms4g -Xmx4g。logs/producer.log)和broker日志,分析警告(WARN)和错误(ERROR)信息,针对性解决问题(如网络超时、磁盘满)。kafka-producer-perf-test.sh脚本进行压力测试,模拟高并发场景,验证调优效果。例如:bin/kafka-producer-perf-test.sh --topic test-topic --num-records 1000000 --record-size 1000 --throughput 10000 --producer-props bootstrap.servers=localhost:9092,batch.size=32768,linger.ms=100
producer.send(record, callback)异步发送模式,避免同步发送的阻塞,提高生产者吞吐量。max.request.size:限制单条消息大小(建议5MB~10MB),避免因消息过大导致传输失败或broker拒绝。