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、内存、磁盘类型)进行调整,建议在测试环境中验证配置效果后再应用于生产环境。