Linux环境下Kafka配置的关键技巧
选择合适的硬件是Kafka高性能的基础。建议使用至少3台服务器构建集群以实现高可用;服务器需配备多核CPU(如8核及以上)、大内存(如16GB及以上)和高速存储(优先选择SSD,减少I/O延迟);确保网络带宽充足(如万兆网卡),避免高吞吐场景下成为瓶颈。
num.network.threads:处理网络请求的线程数,建议设置为CPU核心数(如8核设置为8),避免网络请求成为瓶颈;num.io.threads:处理磁盘IO的线程数,建议设置为CPU核心数(如8核设置为8),提升磁盘写入/读取效率;socket.send.buffer.bytes/socket.receive.buffer.bytes:socket发送/接收缓冲区大小,建议设置为1MB(1048576字节),提高网络传输吞吐。log.segment.bytes:单个日志段文件大小,建议设置为512MB~1GB(默认1GB),增大段大小可减少日志滚动频率,提升压缩与删除效率;log.retention.hours:日志保留时间,建议设置为168小时(7天)(默认168),根据业务需求调整(如日志保留30天则设置为720小时);log.retention.bytes:单个分区最大日志大小,建议设置为磁盘总容量×80%/topic数,避免日志占满磁盘。num.partitions:主题分区数,建议设置为6~12(默认1),分区数越多,并行处理能力越强(需与消费者线程数匹配);default.replication.factor:默认副本因子,建议设置为3(默认1),容忍1台Broker宕机,保证数据高可用;min.insync.replicas:最小同步副本数,建议设置为2(当default.replication.factor=3时),配合acks=all使用,防止数据丢失。batch.size:批量发送消息的大小,建议设置为64KB~1MB(默认16KB),增大批量大小可减少网络请求次数,提高吞吐;linger.ms:等待批量填满的时间,建议设置为10~100ms(默认0),适当延迟可合并更多消息,提升吞吐(高延迟场景可设置为10~20ms);compression.type:消息压缩类型,建议设置为lz4(平衡压缩率与性能)或zstd(更高压缩率),减少网络传输与存储开销;acks:确认机制,建议设置为all(默认1),等待所有副本确认,保证数据可靠性;enable.idempotence:幂等性,建议设置为true(必须配合acks=all),避免网络重试导致的消息重复。fetch.min.bytes:每次拉取的最小数据量,建议设置为1MB~5MB(默认1字节),增大该值可减少拉取次数,提高吞吐;fetch.max.wait.ms:拉取等待时间,建议设置为100~500ms(默认500ms),配合fetch.min.bytes使用,平衡延迟与吞吐;max.partition.fetch.bytes:单个分区最大拉取字节数,建议设置为1MB~10MB(默认1MB),增大该值可提高单次拉取量;-Xms4G -Xmx4G),避免堆内存过大导致Full GC;-XX:+UseG1GC),减少GC停顿时间,适合高吞吐场景;-XX:MaxGCPauseMillis(目标最大GC停顿时间,默认200ms)和-XX:InitiatingHeapOccupancyPercent(触发GC的堆占用率,默认45%),优化GC性能。ulimit -n 65535),避免Kafka因文件描述符不足无法启动;atime更新(如noatime),减少文件系统写操作;net.core.rmem_max、net.core.wmem_max)增大网络缓冲区,提升网络传输效率。kafka-acls.sh命令);allow.everyone.if.no.acl.found=false(默认false),未配置ACL时默认拒绝访问。log.retention.hours),避免日志占满磁盘;kafka-producer-perf-test工具进行压测,验证配置效果(如测试不同batch.size下的吞吐量)。