Kafka在CentOS环境中的性能优化需围绕配置调优、硬件升级、操作系统优化、网络调整四大核心维度展开,同时结合监控工具持续跟踪效果,以下是具体措施:
num.partitions):根据消费者线程数设置(建议与消费者线程数基本相等),提升并行处理能力。例如,若有10个消费者线程,可设置num.partitions=10。num.io.threads):设置为CPU核心数的1~2倍(如4核CPU设为4~8),负责磁盘写入操作,避免IO成为瓶颈。num.network.threads):设置为CPU核心数的0.5~1倍(如4核CPU设为2~4),处理客户端网络请求,平衡连接处理能力。batch.size/linger.ms):batch.size设置为1MB~10MB(如1MB),linger.ms设置为100ms~500ms(如200ms),通过批量发送减少网络请求次数,提升吞吐量。compression.type):启用LZ4(兼顾吞吐量与CPU开销)或Snappy(低延迟),减少网络传输和磁盘IO。acks):根据可靠性需求选择:acks=1(默认,平衡性能与可靠性)、acks=all(强一致性,适合关键业务)。buffer.memory):设置为64MB~256MB(如128MB),避免生产者因缓冲区满而阻塞。linger.ms+batch.size):配合批量参数使用,异步发送提升效率(需注意消息顺序问题)。fetch.min.bytes):设置为1MB~10MB(如1MB),减少网络拉取次数。fetch.max.wait.ms):设置为100ms~500ms(如200ms),平衡延迟与吞吐量。max.poll.records):设置为100~1000(如500),避免单次拉取过多导致消费延迟。log.dirs配置为多块SSD组成的RAID 0阵列,进一步提高吞吐量。noatime(禁用文件访问时间更新,减少磁盘IO)、nodiratime(禁用目录访问时间更新)选项,例如:mount -o noatime,nodiratime /dev/sdb1 /data/kafka commit参数(如commit=60s),平衡数据安全性和IO性能。vm.swappiness=1(值越小,越不容易使用Swap),避免Kafka进程被OOM Killer杀掉。vm.dirty_background_ratio=10(后台脏页刷新阈值)、vm.dirty_ratio=60(前台脏页刷新阈值),控制脏页写入磁盘的频率。vm.max_map_count=262144(增加内存映射区域数量,避免Kafka进程因内存映射不足而崩溃)。net.core.somaxconn=8192(最大并发连接数)、net.ipv4.tcp_max_syn_backlog=8096(SYN队列长度)、net.ipv4.tcp_fin_timeout=30(FIN_WAIT2超时时间),提升网络连接效率。/etc/security/limits.conf:* soft nofile 100000 * hard nofile 100000 重启Kafka服务使配置生效。ethtool开启多队列支持,分散网络负载。socket.send.buffer.bytes(发送缓冲区,如10MB)和socket.receive.buffer.bytes(接收缓冲区,如10MB),提升网络吞吐量。listeners和advertised.listeners配置内外网流量隔离(如listeners=INTERNAL://:9092,EXTERNAL://:9093),优化资源利用率。compression.type(如LZ4),减少网络传输的数据量。-Xms(初始堆大小)与-Xmx(最大堆大小)设置为相同值(如8GB~16GB),避免堆大小动态调整带来的性能开销。-XX:MaxGCPauseMillis=200(最大GC停顿时间目标,如200ms)、-XX:InitiatingHeapOccupancyPercent=45(触发并发GC的堆占用阈值,如45%),减少GC停顿时间。-XX:MetaspaceSize=256m(初始元空间大小)和-XX:MaxMetaspaceSize=512m(最大元空间大小),避免元空间溢出。log.retention.hours=168(7天)),避免磁盘空间耗尽;启用Log Cleaner(log.cleaner.enable=true)清理过期数据。以上优化措施需根据实际业务场景(如吞吐量、延迟、可靠性需求)和硬件环境(如CPU、内存、磁盘类型)进行调整,建议在测试环境中验证配置效果后再应用于生产环境。