如何通过Ubuntu优化Kafka性能
-Xmx/-Xms),避免频繁GC导致的性能下降。log.dirs参数配置),提高并行I/O能力;避免单磁盘过载。ulimit -n 65536临时生效,或修改/etc/security/limits.conf永久生效(添加* soft nofile 65536、* hard nofile 65536)。/etc/sysctl.conf文件,调整以下参数提升网络性能:
net.core.somaxconn=65536:增加TCP监听队列长度,避免连接被拒绝;net.ipv4.tcp_max_syn_backlog=65536:增大SYN队列大小,处理更多并发连接请求;net.ipv4.tcp_tw_reuse=1:允许复用TIME_WAIT状态的连接,减少资源占用。echo never > /sys/kernel/mm/transparent_hugepage/enabled禁用THP。num.network.threads:设置为CPU核心数+1,负责处理网络请求(如接收生产者消息、发送消费者响应);num.io.threads:设置为CPU核心数×2,负责磁盘I/O操作(如写入日志、读取数据)。例如,8核CPU可设置为num.network.threads=9、num.io.threads=16。socket.send.buffer.bytes:设置为1MB(默认100KB),提高生产者发送数据的缓冲能力;socket.receive.buffer.bytes:设置为1MB,提高Broker接收数据的缓冲能力;socket.request.max.bytes:设置为100MB(默认10MB),允许更大的请求批量处理,减少网络往返次数。log.segment.bytes:设置为1GB(默认1GB),减少日志分段数量,降低索引维护开销;log.retention.hours:设置为168小时(7天),自动清理过期数据,避免磁盘空间耗尽;log.cleanup.policy=compact):针对Key-Value型数据(如用户状态更新),保留最新值,减少冗余存储。replication.factor=3),保障数据高可用;避免副本数过多(如超过5),增加同步延迟。-Xmx(最大堆内存)和-Xms(初始堆内存),建议两者相等(如-Xmx30g -Xms30g),避免堆内存动态扩展带来的性能波动;堆内存不宜过大(如超过64GB),否则会增加Full GC时间。-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35(目标最大GC停顿时间为20ms,当堆内存使用率达35%时触发并发GC周期)。batch.size:设置为1MB(默认16KB),将多个小消息合并为批量发送,减少网络请求次数;linger.ms:设置为100ms以上(默认0ms),让Producer等待一段时间再发送批次,提高批量大小;compression.type:启用压缩(如snappy、lz4),减少网络传输数据量(压缩率约30%-50%);buffer.memory:设置为64MB以上(默认32MB),提高Producer的内存缓冲能力,避免因缓冲区满导致阻塞。fetch.min.bytes:设置为1MB(默认1字节),让Consumer等待足够数据后再拉取,减少网络请求次数;fetch.max.wait.ms:设置为1000ms(默认500ms),控制拉取数据的最大等待时间;max.poll.records:设置为500以下(默认500),控制每次poll调用返回的消息数,避免单次处理过多消息导致内存溢出。under replicated partitions)、请求延迟;records-lag)、消费延迟(consumer-lag);kafka-log-dirs工具检查磁盘空间使用情况,删除过期数据(根据log.retention.hours配置);kafka-console-consumer导出到文件);