Kafka在Linux环境下的调优策略
/etc/security/limits.conf,添加* soft nofile 100000和* hard nofile 100000;临时生效可使用ulimit -n 100000。net.core.rmem_max=16777216(接收缓冲区最大值)、net.core.wmem_max=16777216(发送缓冲区最大值)、net.ipv4.tcp_rmem="4096 87380 16777216"(TCP接收缓冲区分段)、net.ipv4.tcp_wmem="4096 65536 16777216"(TCP发送缓冲区分段),提升网络吞吐。vm.swappiness=1(减少交换分区使用,避免磁盘I/O瓶颈)、vm.dirty_background_ratio=5(后台脏页刷新阈值)、vm.dirty_ratio=10(前台脏页刷新阈值),优化内存与磁盘交互。vm.max_map_count=262144(允许更多内存映射文件,提升Kafka处理大量小文件的能力)。noatime(不记录访问时间)、nodiratime(不记录目录访问时间)选项,减少不必要的磁盘写入。num.network.threads:处理网络请求的线程数,建议设置为CPU核心数的1-2倍(如8核CPU设置为8-16)。num.io.threads:处理磁盘I/O的线程数,建议设置为CPU核心数的2倍(如8核CPU设置为16),应对高并发写入/读取。log.segment.bytes:单个日志段文件大小,建议设置为1GB(平衡日志管理与搜索性能,过大导致搜索变慢,过小增加I/O次数)。log.retention.hours:日志保留时间,根据业务需求设置(如7天=168小时),避免磁盘空间浪费。log.flush.interval.messages:批量刷新到磁盘的消息数(如10000条),log.flush.interval.ms:批量刷新的时间间隔(如1000ms),适当增大可减少I/O次数,提升吞吐(需权衡数据安全性)。num.partitions:主题分区数,建议设置为消费者数量的2-3倍(提升并行消费能力),同时考虑集群规模(分区数不宜超过Broker数量的2-3倍,避免负载不均)。default.replication.factor:默认副本因子,设置为3(确保数据高可用,避免单点故障)。min.insync.replicas:最小同步副本数,设置为2(保证数据同步的可靠性,避免因副本滞后导致写入失败)。-Xms(初始堆内存)与-Xmx(最大堆内存)设置为相同值(如8G),避免动态扩展带来的性能开销。-XX:+UseG1GC),适合大内存堆,能有效控制GC暂停时间(-XX:MaxGCPauseMillis=200,设置最大GC暂停时间为200ms;-XX:InitiatingHeapOccupancyPercent=45,当堆占用率达45%时触发并发GC周期)。-XX:MaxMetaspaceSize=512m(限制元空间大小,避免元空间溢出)。batch.size:批次大小(如16KB-1MB),增大批次可提升吞吐,但会增加延迟(需根据业务需求平衡)。linger.ms:等待批次填充的时间(如10-100ms),适当增大可合并更多消息到批次,提升吞吐。fetch.min.bytes:消费者每次拉取的最小数据量(如1KB),增大可减少网络请求次数,提升消费效率。compression.type:消息压缩(如gzip、snappy、lz4),减少网络传输和存储开销(lz4压缩率高且速度快,推荐使用)。kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec),全面掌握集群状态。server.log、controller.log),使用ELK(Elasticsearch+Logstash+Kibana)或Loki收集和分析日志,及时发现潜在问题(如Broker宕机、副本同步滞后)。